@tricoteuses/assemblee 1.0.0-next.2 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/lib/api.js +23 -7
- package/lib/api.mjs +41 -0
- package/lib/bugs/acteur-00010/plugin.test.js +139 -33
- package/lib/bugs/acteur-00010/plugin.test.mjs +33 -0
- package/lib/bugs/acteur-00010.js +166 -24
- package/lib/bugs/acteur-00010.mjs +31 -0
- package/lib/bugs/agenda-00002/plugin.test.js +178 -52
- package/lib/bugs/agenda-00002/plugin.test.mjs +52 -0
- package/lib/bugs/agenda-00002.js +507 -143
- package/lib/bugs/agenda-00002.mjs +197 -0
- package/lib/bugs/agenda-00008/plugin.test.js +143 -31
- package/lib/bugs/agenda-00008/plugin.test.mjs +31 -0
- package/lib/bugs/agenda-00008.js +180 -25
- package/lib/bugs/agenda-00008.mjs +30 -0
- package/lib/bugs/agenda-00011/plugin.test.js +371 -156
- package/lib/bugs/agenda-00011/plugin.test.mjs +156 -0
- package/lib/bugs/agenda-00011.js +416 -117
- package/lib/bugs/agenda-00011.mjs +150 -0
- package/lib/bugs.js +591 -54
- package/lib/bugs.mjs +93 -0
- package/lib/cleaners/actes_legislatifs.js +149 -61
- package/lib/cleaners/actes_legislatifs.mjs +311 -0
- package/lib/cleaners/acteurs.js +255 -123
- package/lib/cleaners/acteurs.mjs +211 -0
- package/lib/cleaners/amendements.js +242 -117
- package/lib/cleaners/amendements.mjs +292 -0
- package/lib/cleaners/documents.js +147 -62
- package/lib/cleaners/documents.mjs +162 -0
- package/lib/cleaners/dossiers_legislatifs.js +132 -45
- package/lib/cleaners/dossiers_legislatifs.mjs +123 -0
- package/lib/cleaners/index.js +64 -8
- package/lib/cleaners/index.mjs +8 -0
- package/lib/cleaners/organes.js +54 -21
- package/lib/cleaners/organes.mjs +64 -0
- package/lib/cleaners/reunions.js +237 -127
- package/lib/cleaners/reunions.mjs +318 -0
- package/lib/cleaners/scrutins.js +261 -99
- package/lib/cleaners/scrutins.mjs +254 -0
- package/lib/cleaners/xml.js +81 -16
- package/lib/cleaners/xml.mjs +42 -0
- package/lib/datasets.js +284 -153
- package/lib/datasets.mjs +596 -0
- package/lib/dates.js +93 -34
- package/lib/dates.mjs +98 -0
- package/lib/dossiers_legislatifs.js +107 -33
- package/lib/dossiers_legislatifs.mjs +215 -0
- package/lib/file_systems.js +203 -35
- package/lib/file_systems.mjs +64 -0
- package/lib/git.js +139 -41
- package/lib/git.mjs +114 -0
- package/lib/index.js +310 -16
- package/lib/index.mjs +16 -0
- package/lib/inserters.js +355 -131
- package/lib/inserters.mjs +413 -0
- package/lib/loaders.js +900 -440
- package/lib/loaders.mjs +678 -0
- package/lib/organes.js +15 -5
- package/lib/organes.mjs +18 -0
- package/lib/parsers/documents.js +241 -89
- package/lib/parsers/documents.mjs +433 -0
- package/lib/parsers/index.js +36 -3
- package/lib/parsers/index.mjs +3 -0
- package/lib/parsers/recherche_amendements.js +616 -173
- package/lib/parsers/recherche_amendements.mjs +189 -0
- package/lib/raw_types/acteurs_et_organes.d.ts +36 -148
- package/lib/raw_types/acteurs_et_organes.js +228 -506
- package/lib/raw_types/acteurs_et_organes.mjs +1240 -0
- package/lib/raw_types/agendas.js +165 -75
- package/lib/raw_types/agendas.mjs +944 -0
- package/lib/raw_types/amendements.js +165 -77
- package/lib/raw_types/amendements.mjs +1040 -0
- package/lib/raw_types/dossiers_legislatifs.d.ts +1 -43
- package/lib/raw_types/dossiers_legislatifs.js +181 -143
- package/lib/raw_types/dossiers_legislatifs.mjs +1792 -0
- package/lib/raw_types/scrutins.js +144 -61
- package/lib/raw_types/scrutins.mjs +645 -0
- package/lib/scripts/bugs_helper.js +657 -155
- package/lib/scripts/bugs_helper.mjs +286 -0
- package/lib/scripts/clean_data.js +380 -145
- package/lib/scripts/clean_data.mjs +190 -0
- package/lib/scripts/clean_reorganized_data.js +627 -331
- package/lib/scripts/clean_reorganized_data.mjs +520 -0
- package/lib/scripts/diff_amendements.js +159 -73
- package/lib/scripts/diff_amendements.mjs +234 -0
- package/lib/scripts/document_dossiers_legislatifs.js +570 -288
- package/lib/scripts/document_dossiers_legislatifs.mjs +494 -0
- package/lib/scripts/get_today_reunions.js +37 -20
- package/lib/scripts/get_today_reunions.mjs +41 -0
- package/lib/scripts/merge_scrutins.js +121 -39
- package/lib/scripts/merge_scrutins.mjs +69 -0
- package/lib/scripts/parse_textes_lois.js +179 -125
- package/lib/scripts/parse_textes_lois.mjs +215 -0
- package/lib/scripts/raw_types_from_amendements.js +276 -77
- package/lib/scripts/raw_types_from_amendements.mjs +118 -0
- package/lib/scripts/reorganize_data.js +867 -446
- package/lib/scripts/reorganize_data.mjs +712 -0
- package/lib/scripts/retrieve_deputes_photos.js +378 -157
- package/lib/scripts/retrieve_deputes_photos.mjs +230 -0
- package/lib/scripts/retrieve_documents.js +648 -172
- package/lib/scripts/retrieve_documents.mjs +292 -0
- package/lib/scripts/retrieve_open_data.js +286 -85
- package/lib/scripts/retrieve_open_data.mjs +125 -0
- package/lib/scripts/retrieve_pending_amendments.js +302 -69
- package/lib/scripts/retrieve_pending_amendments.mjs +130 -0
- package/lib/scripts/retrieve_senateurs_photos.js +374 -198
- package/lib/scripts/retrieve_senateurs_photos.mjs +277 -0
- package/lib/scripts/retrieve_textes_lois.js +343 -89
- package/lib/scripts/retrieve_textes_lois.mjs +168 -0
- package/lib/scripts/test_load.js +30 -11
- package/lib/scripts/test_load.mjs +26 -0
- package/lib/scripts/test_load_big_files.js +30 -11
- package/lib/scripts/test_load_big_files.mjs +26 -0
- package/lib/scripts/validate_json.js +370 -120
- package/lib/scripts/validate_json.mjs +216 -0
- package/lib/shared_types/codes_actes.js +50 -15
- package/lib/shared_types/codes_actes.mjs +228 -0
- package/lib/strings.js +16 -3
- package/lib/strings.mjs +7 -0
- package/lib/types/acteurs_et_organes.js +156 -71
- package/lib/types/acteurs_et_organes.mjs +918 -0
- package/lib/types/agendas.js +154 -67
- package/lib/types/agendas.mjs +623 -0
- package/lib/types/amendements.js +166 -77
- package/lib/types/amendements.mjs +885 -0
- package/lib/types/dossiers_legislatifs.d.ts +1 -42
- package/lib/types/dossiers_legislatifs.js +182 -143
- package/lib/types/dossiers_legislatifs.mjs +1120 -0
- package/lib/types/legislatures.js +12 -3
- package/lib/types/legislatures.mjs +9 -0
- package/lib/types/scrutins.js +144 -61
- package/lib/types/scrutins.mjs +528 -0
- package/lib/urls.js +44 -25
- package/lib/urls.mjs +201 -0
- package/package.json +33 -12
|
@@ -1,14 +1,58 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
import fs from "fs-extra";
|
|
5
|
-
import path from "path"; // import { EnabledDatasets } from "../datasets"
|
|
6
|
-
// import { loadAssembleeData } from "../loaders"
|
|
3
|
+
require("core-js/modules/es.array.slice.js");
|
|
7
4
|
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
require("core-js/modules/es.object.to-string.js");
|
|
6
|
+
|
|
7
|
+
require("core-js/modules/es.function.name.js");
|
|
8
|
+
|
|
9
|
+
require("core-js/modules/es.array.from.js");
|
|
10
|
+
|
|
11
|
+
require("core-js/modules/es.string.iterator.js");
|
|
12
|
+
|
|
13
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
14
|
+
|
|
15
|
+
require("core-js/modules/es.symbol.js");
|
|
16
|
+
|
|
17
|
+
require("core-js/modules/es.symbol.description.js");
|
|
18
|
+
|
|
19
|
+
require("core-js/modules/es.symbol.iterator.js");
|
|
20
|
+
|
|
21
|
+
require("core-js/modules/es.array.iterator.js");
|
|
22
|
+
|
|
23
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
24
|
+
|
|
25
|
+
require("core-js/modules/es.array.is-array.js");
|
|
26
|
+
|
|
27
|
+
require("core-js/modules/es.array.join.js");
|
|
28
|
+
|
|
29
|
+
require("core-js/modules/es.string.ends-with.js");
|
|
30
|
+
|
|
31
|
+
require("core-js/modules/es.string.starts-with.js");
|
|
32
|
+
|
|
33
|
+
require("core-js/modules/es.array.concat.js");
|
|
34
|
+
|
|
35
|
+
var _assert = _interopRequireDefault(require("assert"));
|
|
36
|
+
|
|
37
|
+
var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
|
|
38
|
+
|
|
39
|
+
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
40
|
+
|
|
41
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
42
|
|
|
11
|
-
|
|
43
|
+
var _documents = require("../parsers/documents");
|
|
44
|
+
|
|
45
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
46
|
+
|
|
47
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
48
|
+
|
|
49
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
50
|
+
|
|
51
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
52
|
+
|
|
53
|
+
// import { Document, TypeDocument } from "../types/dossiers_legislatifs"
|
|
54
|
+
// import { DocumentUrlFormat, urlFromDocument } from "../urls"
|
|
55
|
+
var optionsDefinitions = [{
|
|
12
56
|
alias: "c",
|
|
13
57
|
help: "commit split files",
|
|
14
58
|
name: "commit",
|
|
@@ -45,7 +89,7 @@ const optionsDefinitions = [{
|
|
|
45
89
|
name: "dataDir",
|
|
46
90
|
type: String
|
|
47
91
|
}];
|
|
48
|
-
|
|
92
|
+
var options = (0, _commandLineArgs["default"])(optionsDefinitions); // function commitAndPush(repositoryDir: string, commit: boolean, remotes?: string[]): boolean {
|
|
49
93
|
// let error = false
|
|
50
94
|
// if (commit) {
|
|
51
95
|
// execSync(`git add .`, {
|
|
@@ -88,128 +132,138 @@ const options = commandLineArgs(optionsDefinitions); // function commitAndPush(r
|
|
|
88
132
|
// }
|
|
89
133
|
|
|
90
134
|
function parseTextesLois() {
|
|
91
|
-
|
|
92
|
-
|
|
135
|
+
(0, _assert["default"])(!options.commit || options.filename, 'Options "commit" & "filename" are incompatible');
|
|
136
|
+
var dataDir = options.dataDir; // const { documentByUid } = loadAssembleeData(
|
|
93
137
|
// dataDir,
|
|
94
138
|
// EnabledDatasets.DossiersLegislatifs,
|
|
95
139
|
// options.legislature,
|
|
96
140
|
// )
|
|
97
141
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
142
|
+
var textesLoisDir = _path["default"].join(dataDir, "www.assemblee-nationale.fr", options.legislature, "textes");
|
|
143
|
+
|
|
144
|
+
var _iterator = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(textesLoisDir)),
|
|
145
|
+
_step;
|
|
146
|
+
|
|
147
|
+
try {
|
|
148
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
149
|
+
var filename = _step.value;
|
|
150
|
+
|
|
151
|
+
if (filename[0] === ".") {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (!filename.endsWith(".asp")) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (options.filename && !filename.startsWith(options.filename)) {
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
var texteLoiPath = _path["default"].join(textesLoisDir, filename);
|
|
164
|
+
|
|
165
|
+
if (!options.silent) {
|
|
166
|
+
console.log("Parsing \"texte de loi\" ".concat(texteLoiPath, "\u2026"));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
var texteLoiPage = _fsExtra["default"].readFileSync(texteLoiPath, {
|
|
170
|
+
encoding: "utf-8"
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
var texteLoiUrl = "http://www.assemblee-nationale.fr/".concat(options.legislature, "/textes/").concat(filename);
|
|
174
|
+
var texteLoiParsed = (0, _documents.parseTexteLoi)(texteLoiUrl, texteLoiPage);
|
|
175
|
+
|
|
176
|
+
if (options.filename && options.verbose) {
|
|
177
|
+
console.log(JSON.stringify(texteLoiParsed.subdivisions, null, 2));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
var error = texteLoiParsed.error;
|
|
181
|
+
|
|
182
|
+
if (error) {
|
|
183
|
+
console.error(" Error while parsing page \"".concat(texteLoiPath, "\":\n\nError:\n").concat(JSON.stringify(error, null, 2)));
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
} // fs.ensureDirSync(textesLoisDir)
|
|
187
|
+
// if (!options.uid) {
|
|
188
|
+
// for (const filename of fs.readdirSync(textesLoisDir)) {
|
|
189
|
+
// if (filename[0] === ".") {
|
|
190
|
+
// continue
|
|
191
|
+
// }
|
|
192
|
+
// fs.removeSync(path.join(textesLoisDir, filename))
|
|
193
|
+
// }
|
|
194
|
+
// }
|
|
195
|
+
// const textesLois = Object.values(documentByUid)
|
|
196
|
+
// .filter(document => document.xsiType === TypeDocument.TexteLoiType)
|
|
197
|
+
// .filter(
|
|
198
|
+
// document => document.uid.startsWith("PIONAN") || document.uid.startsWith("PRJLAN"),
|
|
199
|
+
// )
|
|
200
|
+
// .map(document => {
|
|
201
|
+
// return {
|
|
202
|
+
// ...document,
|
|
203
|
+
// rawDocumentAssembleeUrl: urlFromDocument(document, DocumentUrlFormat.RawHtml),
|
|
204
|
+
// }
|
|
205
|
+
// })
|
|
206
|
+
// .sort((a, b) =>
|
|
207
|
+
// a.rawDocumentAssembleeUrl === null
|
|
208
|
+
// ? -1
|
|
209
|
+
// : b.rawDocumentAssembleeUrl === null
|
|
210
|
+
// ? 1
|
|
211
|
+
// : a.rawDocumentAssembleeUrl.localeCompare(b.rawDocumentAssembleeUrl),
|
|
212
|
+
// )
|
|
213
|
+
// const firstUid = options.uid
|
|
214
|
+
// let skip = !!firstUid
|
|
215
|
+
// for (const texteLoi of textesLois) {
|
|
216
|
+
// if (skip) {
|
|
217
|
+
// if (texteLoi.uid === firstUid) {
|
|
218
|
+
// skip = false
|
|
219
|
+
// } else {
|
|
220
|
+
// continue
|
|
221
|
+
// }
|
|
222
|
+
// }
|
|
223
|
+
// if (!options.silent) {
|
|
224
|
+
// console.log(
|
|
225
|
+
// `Retrieving bill ${texteLoi.uid} at ${texteLoi.rawDocumentAssembleeUrl}`,
|
|
226
|
+
// )
|
|
227
|
+
// }
|
|
228
|
+
// if (texteLoi.rawDocumentAssembleeUrl === null) {
|
|
229
|
+
// continue
|
|
230
|
+
// }
|
|
231
|
+
// const url = new URL(texteLoi.rawDocumentAssembleeUrl)
|
|
232
|
+
// const filePath = path.join(dataDir, url.hostname, ...url.pathname.split("/"))
|
|
233
|
+
// assert.strictEqual(textesLoisDir, path.dirname(filePath))
|
|
234
|
+
// let page = undefined
|
|
235
|
+
// try {
|
|
236
|
+
// page = fs.readFileSync(filePath, { encoding: "utf-8" })
|
|
237
|
+
// } catch (e) {
|
|
238
|
+
// if (e.code === "ENOENT") {
|
|
239
|
+
// continue
|
|
240
|
+
// }
|
|
241
|
+
// throw e
|
|
242
|
+
// }
|
|
243
|
+
// if (options.parse) {
|
|
244
|
+
// const texteLoiParsed = parseTexteLoi(texteLoi.rawDocumentAssembleeUrl, page)
|
|
245
|
+
// const { error } = texteLoiParsed
|
|
246
|
+
// if (error) {
|
|
247
|
+
// console.error(
|
|
248
|
+
// `Error while parsing page "${texteLoi.rawDocumentAssembleeUrl}" (uid: ${
|
|
249
|
+
// texteLoi.uid
|
|
250
|
+
// }):\n\nError:\n${JSON.stringify(error, null, 2)}`,
|
|
251
|
+
// )
|
|
252
|
+
// continue
|
|
253
|
+
// }
|
|
254
|
+
// }
|
|
255
|
+
// }
|
|
256
|
+
// if commitAndPush(textesLoisDir, options.commit, options.remote) {
|
|
257
|
+
// process.exit(1)
|
|
258
|
+
// }
|
|
259
|
+
// return textesLois
|
|
211
260
|
|
|
261
|
+
} catch (err) {
|
|
262
|
+
_iterator.e(err);
|
|
263
|
+
} finally {
|
|
264
|
+
_iterator.f();
|
|
265
|
+
}
|
|
212
266
|
}
|
|
213
267
|
|
|
214
268
|
parseTextesLois();
|
|
215
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjb21tYW5kTGluZUFyZ3MiLCJmcyIsInBhdGgiLCJwYXJzZVRleHRlTG9pIiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJCb29sZWFuIiwiU3RyaW5nIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsInBhcnNlVGV4dGVzTG9pcyIsImNvbW1pdCIsImZpbGVuYW1lIiwiZGF0YURpciIsInRleHRlc0xvaXNEaXIiLCJqb2luIiwibGVnaXNsYXR1cmUiLCJyZWFkZGlyU3luYyIsImVuZHNXaXRoIiwic3RhcnRzV2l0aCIsInRleHRlTG9pUGF0aCIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJ0ZXh0ZUxvaVBhZ2UiLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsInRleHRlTG9pVXJsIiwidGV4dGVMb2lQYXJzZWQiLCJ2ZXJib3NlIiwiSlNPTiIsInN0cmluZ2lmeSIsInN1YmRpdmlzaW9ucyIsImVycm9yIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcGFyc2VfdGV4dGVzX2xvaXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbi8vIGltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbi8vIGltcG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG4vLyBpbXBvcnQgeyBsb2FkQXNzZW1ibGVlRGF0YSB9IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7IHBhcnNlVGV4dGVMb2kgfSBmcm9tIFwiLi4vcGFyc2Vycy9kb2N1bWVudHNcIlxuLy8gaW1wb3J0IHsgRG9jdW1lbnQsIFR5cGVEb2N1bWVudCB9IGZyb20gXCIuLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG4vLyBpbXBvcnQgeyBEb2N1bWVudFVybEZvcm1hdCwgdXJsRnJvbURvY3VtZW50IH0gZnJvbSBcIi4uL3VybHNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgc3BsaXQgZmlsZXNcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJmXCIsXG4gICAgaGVscDogXCJGaWxlbmFtZSBvZiBBc3NlbWJsw6llJ3MgZG9jdW1lbnQgdG8gcGFyc2VcIixcbiAgICBuYW1lOiBcImZpbGVuYW1lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwibFwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCIxNlwiLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuLy8gZnVuY3Rpb24gY29tbWl0QW5kUHVzaChyZXBvc2l0b3J5RGlyOiBzdHJpbmcsIGNvbW1pdDogYm9vbGVhbiwgcmVtb3Rlcz86IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4vLyAgIGxldCBlcnJvciA9IGZhbHNlXG4vLyAgIGlmIChjb21taXQpIHtcbi8vICAgICBleGVjU3luYyhgZ2l0IGFkZCAuYCwge1xuLy8gICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuLy8gICAgICAgZW52OiBwcm9jZXNzLmVudixcbi8vICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4vLyAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbi8vICAgICB9KVxuLy8gICAgIHRyeSB7XG4vLyAgICAgICBleGVjU3luYygnZ2l0IGNvbW1pdCAtbSBcIk5vdXZlbGxlIG1vaXNzb25cIicsIHtcbi8vICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuLy8gICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuLy8gICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuLy8gICAgICAgfSlcbi8vICAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbi8vICAgICAgIGlmIChcbi8vICAgICAgICAgKGNoaWxkUHJvY2VzcyBhcyBDaGlsZFByb2Nlc3MpLnN0ZGVyciA9PT0gbnVsbCB8fFxuLy8gICAgICAgICAhL25vdGhpbmcgdG8gY29tbWl0Ly50ZXN0KChjaGlsZFByb2Nlc3MgYXMgYW55KS5zdGRvdXQpXG4vLyAgICAgICApIHtcbi8vICAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuLy8gICAgICAgICB0aHJvdyBjaGlsZFByb2Nlc3Ncbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuLy8gICAgICAgdHJ5IHtcbi8vICAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4vLyAgICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuLy8gICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4vLyAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbi8vICAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbi8vICAgICAgICAgfSlcbi8vICAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuLy8gICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbi8vICAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuLy8gICAgICAgICBlcnJvciA9IHRydWVcbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgIH1cbi8vICAgcmV0dXJuIGVycm9yXG4vLyB9XG5cbmZ1bmN0aW9uIHBhcnNlVGV4dGVzTG9pcygpOiB2b2lkIHtcbiAgYXNzZXJ0KFxuICAgICFvcHRpb25zLmNvbW1pdCB8fCBvcHRpb25zLmZpbGVuYW1lLFxuICAgICdPcHRpb25zIFwiY29tbWl0XCIgJiBcImZpbGVuYW1lXCIgYXJlIGluY29tcGF0aWJsZScsXG4gIClcblxuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIC8vIGNvbnN0IHsgZG9jdW1lbnRCeVVpZCB9ID0gbG9hZEFzc2VtYmxlZURhdGEoXG4gIC8vICAgZGF0YURpcixcbiAgLy8gICBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcyxcbiAgLy8gICBvcHRpb25zLmxlZ2lzbGF0dXJlLFxuICAvLyApXG5cbiAgY29uc3QgdGV4dGVzTG9pc0RpciA9IHBhdGguam9pbihcbiAgICBkYXRhRGlyLFxuICAgIFwid3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnJcIixcbiAgICBvcHRpb25zLmxlZ2lzbGF0dXJlLFxuICAgIFwidGV4dGVzXCIsXG4gIClcbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyh0ZXh0ZXNMb2lzRGlyKSkge1xuICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmICghZmlsZW5hbWUuZW5kc1dpdGgoXCIuYXNwXCIpKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5maWxlbmFtZSAmJiAhZmlsZW5hbWUuc3RhcnRzV2l0aChvcHRpb25zLmZpbGVuYW1lKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgdGV4dGVMb2lQYXRoID0gcGF0aC5qb2luKHRleHRlc0xvaXNEaXIsIGZpbGVuYW1lKVxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBQYXJzaW5nIFwidGV4dGUgZGUgbG9pXCIgJHt0ZXh0ZUxvaVBhdGh94oCmYClcbiAgICB9XG4gICAgY29uc3QgdGV4dGVMb2lQYWdlID0gZnMucmVhZEZpbGVTeW5jKHRleHRlTG9pUGF0aCwgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0pXG4gICAgY29uc3QgdGV4dGVMb2lVcmwgPSBgaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLyR7b3B0aW9ucy5sZWdpc2xhdHVyZX0vdGV4dGVzLyR7ZmlsZW5hbWV9YFxuICAgIGNvbnN0IHRleHRlTG9pUGFyc2VkID0gcGFyc2VUZXh0ZUxvaSh0ZXh0ZUxvaVVybCwgdGV4dGVMb2lQYWdlKVxuICAgIGlmIChvcHRpb25zLmZpbGVuYW1lICYmIG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGV4dGVMb2lQYXJzZWQuc3ViZGl2aXNpb25zLCBudWxsLCAyKSlcbiAgICB9XG4gICAgY29uc3QgeyBlcnJvciB9ID0gdGV4dGVMb2lQYXJzZWRcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGAgIEVycm9yIHdoaWxlIHBhcnNpbmcgcGFnZSBcIiR7dGV4dGVMb2lQYXRofVwiOlxcblxcbkVycm9yOlxcbiR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyLFxuICAgICAgICApfWAsXG4gICAgICApXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgfVxuXG4gIC8vIGZzLmVuc3VyZURpclN5bmModGV4dGVzTG9pc0RpcilcbiAgLy8gaWYgKCFvcHRpb25zLnVpZCkge1xuICAvLyAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmModGV4dGVzTG9pc0RpcikpIHtcbiAgLy8gICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgLy8gICAgICAgY29udGludWVcbiAgLy8gICAgIH1cbiAgLy8gICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKHRleHRlc0xvaXNEaXIsIGZpbGVuYW1lKSlcbiAgLy8gICB9XG4gIC8vIH1cblxuICAvLyBjb25zdCB0ZXh0ZXNMb2lzID0gT2JqZWN0LnZhbHVlcyhkb2N1bWVudEJ5VWlkKVxuICAvLyAgIC5maWx0ZXIoZG9jdW1lbnQgPT4gZG9jdW1lbnQueHNpVHlwZSA9PT0gVHlwZURvY3VtZW50LlRleHRlTG9pVHlwZSlcbiAgLy8gICAuZmlsdGVyKFxuICAvLyAgICAgZG9jdW1lbnQgPT4gZG9jdW1lbnQudWlkLnN0YXJ0c1dpdGgoXCJQSU9OQU5cIikgfHwgZG9jdW1lbnQudWlkLnN0YXJ0c1dpdGgoXCJQUkpMQU5cIiksXG4gIC8vICAgKVxuICAvLyAgIC5tYXAoZG9jdW1lbnQgPT4ge1xuICAvLyAgICAgcmV0dXJuIHtcbiAgLy8gICAgICAgLi4uZG9jdW1lbnQsXG4gIC8vICAgICAgIHJhd0RvY3VtZW50QXNzZW1ibGVlVXJsOiB1cmxGcm9tRG9jdW1lbnQoZG9jdW1lbnQsIERvY3VtZW50VXJsRm9ybWF0LlJhd0h0bWwpLFxuICAvLyAgICAgfVxuICAvLyAgIH0pXG4gIC8vICAgLnNvcnQoKGEsIGIpID0+XG4gIC8vICAgICBhLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsID09PSBudWxsXG4gIC8vICAgICAgID8gLTFcbiAgLy8gICAgICAgOiBiLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsID09PSBudWxsXG4gIC8vICAgICAgID8gMVxuICAvLyAgICAgICA6IGEucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwubG9jYWxlQ29tcGFyZShiLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsKSxcbiAgLy8gICApXG5cbiAgLy8gY29uc3QgZmlyc3RVaWQgPSBvcHRpb25zLnVpZFxuICAvLyBsZXQgc2tpcCA9ICEhZmlyc3RVaWRcbiAgLy8gZm9yIChjb25zdCB0ZXh0ZUxvaSBvZiB0ZXh0ZXNMb2lzKSB7XG4gIC8vICAgaWYgKHNraXApIHtcbiAgLy8gICAgIGlmICh0ZXh0ZUxvaS51aWQgPT09IGZpcnN0VWlkKSB7XG4gIC8vICAgICAgIHNraXAgPSBmYWxzZVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgY29udGludWVcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAvLyAgICAgY29uc29sZS5sb2coXG4gIC8vICAgICAgIGBSZXRyaWV2aW5nIGJpbGwgJHt0ZXh0ZUxvaS51aWR9IGF0ICR7dGV4dGVMb2kucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmx9YCxcbiAgLy8gICAgIClcbiAgLy8gICB9XG4gIC8vICAgaWYgKHRleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsID09PSBudWxsKSB7XG4gIC8vICAgICBjb250aW51ZVxuICAvLyAgIH1cbiAgLy8gICBjb25zdCB1cmwgPSBuZXcgVVJMKHRleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsKVxuICAvLyAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFEaXIsIHVybC5ob3N0bmFtZSwgLi4udXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKSlcbiAgLy8gICBhc3NlcnQuc3RyaWN0RXF1YWwodGV4dGVzTG9pc0RpciwgcGF0aC5kaXJuYW1lKGZpbGVQYXRoKSlcblxuICAvLyAgIGxldCBwYWdlID0gdW5kZWZpbmVkXG4gIC8vICAgdHJ5IHtcbiAgLy8gICAgIHBhZ2UgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KVxuICAvLyAgIH0gY2F0Y2ggKGUpIHtcbiAgLy8gICAgIGlmIChlLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgLy8gICAgICAgY29udGludWVcbiAgLy8gICAgIH1cbiAgLy8gICAgIHRocm93IGVcbiAgLy8gICB9XG5cbiAgLy8gICBpZiAob3B0aW9ucy5wYXJzZSkge1xuICAvLyAgICAgY29uc3QgdGV4dGVMb2lQYXJzZWQgPSBwYXJzZVRleHRlTG9pKHRleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsLCBwYWdlKVxuICAvLyAgICAgY29uc3QgeyBlcnJvciB9ID0gdGV4dGVMb2lQYXJzZWRcbiAgLy8gICAgIGlmIChlcnJvcikge1xuICAvLyAgICAgICBjb25zb2xlLmVycm9yKFxuICAvLyAgICAgICAgIGBFcnJvciB3aGlsZSBwYXJzaW5nIHBhZ2UgXCIke3RleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsfVwiICh1aWQ6ICR7XG4gIC8vICAgICAgICAgICB0ZXh0ZUxvaS51aWRcbiAgLy8gICAgICAgICB9KTpcXG5cXG5FcnJvcjpcXG4ke0pTT04uc3RyaW5naWZ5KGVycm9yLCBudWxsLCAyKX1gLFxuICAvLyAgICAgICApXG4gIC8vICAgICAgIGNvbnRpbnVlXG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG4gIC8vIGlmIGNvbW1pdEFuZFB1c2godGV4dGVzTG9pc0Rpciwgb3B0aW9ucy5jb21taXQsIG9wdGlvbnMucmVtb3RlKSB7XG4gIC8vICAgcHJvY2Vzcy5leGl0KDEpXG4gIC8vIH1cbiAgLy8gcmV0dXJuIHRleHRlc0xvaXNcbn1cblxucGFyc2VUZXh0ZXNMb2lzKClcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBUCxNQUFtQixRQUFuQixDLENBQ0E7O0FBQ0EsT0FBT0MsZUFBUCxNQUE0QixtQkFBNUI7QUFDQSxPQUFPQyxFQUFQLE1BQWUsVUFBZjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsTUFBakIsQyxDQUVBO0FBQ0E7O1NBQ1NDLGEsbUNBQ1Q7QUFDQTs7QUFFQSxNQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsb0JBRlI7RUFHRUMsSUFBSSxFQUFFLFFBSFI7RUFJRUMsSUFBSSxFQUFFQztBQUpSLENBRHlCLEVBT3pCO0VBQ0VKLEtBQUssRUFBRSxHQURUO0VBRUVDLElBQUksRUFBRSwyQ0FGUjtFQUdFQyxJQUFJLEVBQUUsVUFIUjtFQUlFQyxJQUFJLEVBQUVFO0FBSlIsQ0FQeUIsRUFhekI7RUFDRUwsS0FBSyxFQUFFLEdBRFQ7RUFFRU0sWUFBWSxFQUFFLElBRmhCO0VBR0VKLElBQUksRUFBRSxhQUhSO0VBSUVDLElBQUksRUFBRUU7QUFKUixDQWJ5QixFQW1CekI7RUFDRUwsS0FBSyxFQUFFLEdBRFQ7RUFFRUMsSUFBSSxFQUFFLDZCQUZSO0VBR0VNLFFBQVEsRUFBRSxJQUhaO0VBSUVMLElBQUksRUFBRSxRQUpSO0VBS0VDLElBQUksRUFBRUU7QUFMUixDQW5CeUIsRUEwQnpCO0VBQ0VMLEtBQUssRUFBRSxHQURUO0VBRUVDLElBQUksRUFBRSxvQkFGUjtFQUdFQyxJQUFJLEVBQUUsUUFIUjtFQUlFQyxJQUFJLEVBQUVDO0FBSlIsQ0ExQnlCLEVBZ0N6QjtFQUNFSixLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsY0FGUjtFQUdFQyxJQUFJLEVBQUUsU0FIUjtFQUlFQyxJQUFJLEVBQUVDO0FBSlIsQ0FoQ3lCLEVBc0N6QjtFQUNFSSxhQUFhLEVBQUUsSUFEakI7RUFFRVAsSUFBSSxFQUFFLGdEQUZSO0VBR0VDLElBQUksRUFBRSxTQUhSO0VBSUVDLElBQUksRUFBRUU7QUFKUixDQXRDeUIsQ0FBM0I7QUE2Q0EsTUFBTUksT0FBTyxHQUFHZCxlQUFlLENBQUNJLGtCQUFELENBQS9CLEMsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVNXLGVBQVQsR0FBaUM7RUFDL0JoQixNQUFNLENBQ0osQ0FBQ2UsT0FBTyxDQUFDRSxNQUFULElBQW1CRixPQUFPLENBQUNHLFFBRHZCLEVBRUosZ0RBRkksQ0FBTjtFQUtBLE1BQU1DLE9BQU8sR0FBR0osT0FBTyxDQUFDSSxPQUF4QixDQU4rQixDQU8vQjtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBLE1BQU1DLGFBQWEsR0FBR2pCLElBQUksQ0FBQ2tCLElBQUwsQ0FDcEJGLE9BRG9CLEVBRXBCLDRCQUZvQixFQUdwQkosT0FBTyxDQUFDTyxXQUhZLEVBSXBCLFFBSm9CLENBQXRCOztFQU1BLEtBQUssTUFBTUosUUFBWCxJQUF1QmhCLEVBQUUsQ0FBQ3FCLFdBQUgsQ0FBZUgsYUFBZixDQUF2QixFQUFzRDtJQUNwRCxJQUFJRixRQUFRLENBQUMsQ0FBRCxDQUFSLEtBQWdCLEdBQXBCLEVBQXlCO01BQ3ZCO0lBQ0Q7O0lBQ0QsSUFBSSxDQUFDQSxRQUFRLENBQUNNLFFBQVQsQ0FBa0IsTUFBbEIsQ0FBTCxFQUFnQztNQUM5QjtJQUNEOztJQUNELElBQUlULE9BQU8sQ0FBQ0csUUFBUixJQUFvQixDQUFDQSxRQUFRLENBQUNPLFVBQVQsQ0FBb0JWLE9BQU8sQ0FBQ0csUUFBNUIsQ0FBekIsRUFBZ0U7TUFDOUQ7SUFDRDs7SUFDRCxNQUFNUSxZQUFZLEdBQUd2QixJQUFJLENBQUNrQixJQUFMLENBQVVELGFBQVYsRUFBeUJGLFFBQXpCLENBQXJCOztJQUNBLElBQUksQ0FBQ0gsT0FBTyxDQUFDWSxNQUFiLEVBQXFCO01BQ25CQyxPQUFPLENBQUNDLEdBQVIsQ0FBYSwwQkFBeUJILFlBQWEsR0FBbkQ7SUFDRDs7SUFDRCxNQUFNSSxZQUFZLEdBQUc1QixFQUFFLENBQUM2QixZQUFILENBQWdCTCxZQUFoQixFQUE4QjtNQUFFTSxRQUFRLEVBQUU7SUFBWixDQUE5QixDQUFyQjtJQUNBLE1BQU1DLFdBQVcsR0FBSSxxQ0FBb0NsQixPQUFPLENBQUNPLFdBQVksV0FBVUosUUFBUyxFQUFoRztJQUNBLE1BQU1nQixjQUFjLEdBQUc5QixhQUFhLENBQUM2QixXQUFELEVBQWNILFlBQWQsQ0FBcEM7O0lBQ0EsSUFBSWYsT0FBTyxDQUFDRyxRQUFSLElBQW9CSCxPQUFPLENBQUNvQixPQUFoQyxFQUF5QztNQUN2Q1AsT0FBTyxDQUFDQyxHQUFSLENBQVlPLElBQUksQ0FBQ0MsU0FBTCxDQUFlSCxjQUFjLENBQUNJLFlBQTlCLEVBQTRDLElBQTVDLEVBQWtELENBQWxELENBQVo7SUFDRDs7SUFDRCxNQUFNO01BQUVDO0lBQUYsSUFBWUwsY0FBbEI7O0lBQ0EsSUFBSUssS0FBSixFQUFXO01BQ1RYLE9BQU8sQ0FBQ1csS0FBUixDQUNHLCtCQUE4QmIsWUFBYSxpQkFBZ0JVLElBQUksQ0FBQ0MsU0FBTCxDQUMxREUsS0FEMEQsRUFFMUQsSUFGMEQsRUFHMUQsQ0FIMEQsQ0FJMUQsRUFMSjtNQU9BO0lBQ0Q7RUFDRixDQWxEOEIsQ0FvRC9CO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0Q7O0FBRUR2QixlQUFlIn0=
|
|
269
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIkJvb2xlYW4iLCJTdHJpbmciLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsImRlZmF1bHRPcHRpb24iLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwicGFyc2VUZXh0ZXNMb2lzIiwiYXNzZXJ0IiwiY29tbWl0IiwiZmlsZW5hbWUiLCJkYXRhRGlyIiwidGV4dGVzTG9pc0RpciIsInBhdGgiLCJqb2luIiwibGVnaXNsYXR1cmUiLCJmcyIsInJlYWRkaXJTeW5jIiwiZW5kc1dpdGgiLCJzdGFydHNXaXRoIiwidGV4dGVMb2lQYXRoIiwic2lsZW50IiwiY29uc29sZSIsImxvZyIsInRleHRlTG9pUGFnZSIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwidGV4dGVMb2lVcmwiLCJ0ZXh0ZUxvaVBhcnNlZCIsInBhcnNlVGV4dGVMb2kiLCJ2ZXJib3NlIiwiSlNPTiIsInN0cmluZ2lmeSIsInN1YmRpdmlzaW9ucyIsImVycm9yIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcGFyc2VfdGV4dGVzX2xvaXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbi8vIGltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbi8vIGltcG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG4vLyBpbXBvcnQgeyBsb2FkQXNzZW1ibGVlRGF0YSB9IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7IHBhcnNlVGV4dGVMb2kgfSBmcm9tIFwiLi4vcGFyc2Vycy9kb2N1bWVudHNcIlxuLy8gaW1wb3J0IHsgRG9jdW1lbnQsIFR5cGVEb2N1bWVudCB9IGZyb20gXCIuLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG4vLyBpbXBvcnQgeyBEb2N1bWVudFVybEZvcm1hdCwgdXJsRnJvbURvY3VtZW50IH0gZnJvbSBcIi4uL3VybHNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgc3BsaXQgZmlsZXNcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJmXCIsXG4gICAgaGVscDogXCJGaWxlbmFtZSBvZiBBc3NlbWJsw6llJ3MgZG9jdW1lbnQgdG8gcGFyc2VcIixcbiAgICBuYW1lOiBcImZpbGVuYW1lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwibFwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCIxNlwiLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuLy8gZnVuY3Rpb24gY29tbWl0QW5kUHVzaChyZXBvc2l0b3J5RGlyOiBzdHJpbmcsIGNvbW1pdDogYm9vbGVhbiwgcmVtb3Rlcz86IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4vLyAgIGxldCBlcnJvciA9IGZhbHNlXG4vLyAgIGlmIChjb21taXQpIHtcbi8vICAgICBleGVjU3luYyhgZ2l0IGFkZCAuYCwge1xuLy8gICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuLy8gICAgICAgZW52OiBwcm9jZXNzLmVudixcbi8vICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4vLyAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbi8vICAgICB9KVxuLy8gICAgIHRyeSB7XG4vLyAgICAgICBleGVjU3luYygnZ2l0IGNvbW1pdCAtbSBcIk5vdXZlbGxlIG1vaXNzb25cIicsIHtcbi8vICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuLy8gICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuLy8gICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuLy8gICAgICAgfSlcbi8vICAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbi8vICAgICAgIGlmIChcbi8vICAgICAgICAgKGNoaWxkUHJvY2VzcyBhcyBDaGlsZFByb2Nlc3MpLnN0ZGVyciA9PT0gbnVsbCB8fFxuLy8gICAgICAgICAhL25vdGhpbmcgdG8gY29tbWl0Ly50ZXN0KChjaGlsZFByb2Nlc3MgYXMgYW55KS5zdGRvdXQpXG4vLyAgICAgICApIHtcbi8vICAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuLy8gICAgICAgICB0aHJvdyBjaGlsZFByb2Nlc3Ncbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuLy8gICAgICAgdHJ5IHtcbi8vICAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4vLyAgICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuLy8gICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4vLyAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbi8vICAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbi8vICAgICAgICAgfSlcbi8vICAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuLy8gICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbi8vICAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuLy8gICAgICAgICBlcnJvciA9IHRydWVcbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgIH1cbi8vICAgcmV0dXJuIGVycm9yXG4vLyB9XG5cbmZ1bmN0aW9uIHBhcnNlVGV4dGVzTG9pcygpOiB2b2lkIHtcbiAgYXNzZXJ0KFxuICAgICFvcHRpb25zLmNvbW1pdCB8fCBvcHRpb25zLmZpbGVuYW1lLFxuICAgICdPcHRpb25zIFwiY29tbWl0XCIgJiBcImZpbGVuYW1lXCIgYXJlIGluY29tcGF0aWJsZScsXG4gIClcblxuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIC8vIGNvbnN0IHsgZG9jdW1lbnRCeVVpZCB9ID0gbG9hZEFzc2VtYmxlZURhdGEoXG4gIC8vICAgZGF0YURpcixcbiAgLy8gICBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcyxcbiAgLy8gICBvcHRpb25zLmxlZ2lzbGF0dXJlLFxuICAvLyApXG5cbiAgY29uc3QgdGV4dGVzTG9pc0RpciA9IHBhdGguam9pbihcbiAgICBkYXRhRGlyLFxuICAgIFwid3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnJcIixcbiAgICBvcHRpb25zLmxlZ2lzbGF0dXJlLFxuICAgIFwidGV4dGVzXCIsXG4gIClcbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyh0ZXh0ZXNMb2lzRGlyKSkge1xuICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmICghZmlsZW5hbWUuZW5kc1dpdGgoXCIuYXNwXCIpKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5maWxlbmFtZSAmJiAhZmlsZW5hbWUuc3RhcnRzV2l0aChvcHRpb25zLmZpbGVuYW1lKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgdGV4dGVMb2lQYXRoID0gcGF0aC5qb2luKHRleHRlc0xvaXNEaXIsIGZpbGVuYW1lKVxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBQYXJzaW5nIFwidGV4dGUgZGUgbG9pXCIgJHt0ZXh0ZUxvaVBhdGh94oCmYClcbiAgICB9XG4gICAgY29uc3QgdGV4dGVMb2lQYWdlID0gZnMucmVhZEZpbGVTeW5jKHRleHRlTG9pUGF0aCwgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0pXG4gICAgY29uc3QgdGV4dGVMb2lVcmwgPSBgaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLyR7b3B0aW9ucy5sZWdpc2xhdHVyZX0vdGV4dGVzLyR7ZmlsZW5hbWV9YFxuICAgIGNvbnN0IHRleHRlTG9pUGFyc2VkID0gcGFyc2VUZXh0ZUxvaSh0ZXh0ZUxvaVVybCwgdGV4dGVMb2lQYWdlKVxuICAgIGlmIChvcHRpb25zLmZpbGVuYW1lICYmIG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGV4dGVMb2lQYXJzZWQuc3ViZGl2aXNpb25zLCBudWxsLCAyKSlcbiAgICB9XG4gICAgY29uc3QgeyBlcnJvciB9ID0gdGV4dGVMb2lQYXJzZWRcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGAgIEVycm9yIHdoaWxlIHBhcnNpbmcgcGFnZSBcIiR7dGV4dGVMb2lQYXRofVwiOlxcblxcbkVycm9yOlxcbiR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyLFxuICAgICAgICApfWAsXG4gICAgICApXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgfVxuXG4gIC8vIGZzLmVuc3VyZURpclN5bmModGV4dGVzTG9pc0RpcilcbiAgLy8gaWYgKCFvcHRpb25zLnVpZCkge1xuICAvLyAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmModGV4dGVzTG9pc0RpcikpIHtcbiAgLy8gICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgLy8gICAgICAgY29udGludWVcbiAgLy8gICAgIH1cbiAgLy8gICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKHRleHRlc0xvaXNEaXIsIGZpbGVuYW1lKSlcbiAgLy8gICB9XG4gIC8vIH1cblxuICAvLyBjb25zdCB0ZXh0ZXNMb2lzID0gT2JqZWN0LnZhbHVlcyhkb2N1bWVudEJ5VWlkKVxuICAvLyAgIC5maWx0ZXIoZG9jdW1lbnQgPT4gZG9jdW1lbnQueHNpVHlwZSA9PT0gVHlwZURvY3VtZW50LlRleHRlTG9pVHlwZSlcbiAgLy8gICAuZmlsdGVyKFxuICAvLyAgICAgZG9jdW1lbnQgPT4gZG9jdW1lbnQudWlkLnN0YXJ0c1dpdGgoXCJQSU9OQU5cIikgfHwgZG9jdW1lbnQudWlkLnN0YXJ0c1dpdGgoXCJQUkpMQU5cIiksXG4gIC8vICAgKVxuICAvLyAgIC5tYXAoZG9jdW1lbnQgPT4ge1xuICAvLyAgICAgcmV0dXJuIHtcbiAgLy8gICAgICAgLi4uZG9jdW1lbnQsXG4gIC8vICAgICAgIHJhd0RvY3VtZW50QXNzZW1ibGVlVXJsOiB1cmxGcm9tRG9jdW1lbnQoZG9jdW1lbnQsIERvY3VtZW50VXJsRm9ybWF0LlJhd0h0bWwpLFxuICAvLyAgICAgfVxuICAvLyAgIH0pXG4gIC8vICAgLnNvcnQoKGEsIGIpID0+XG4gIC8vICAgICBhLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsID09PSBudWxsXG4gIC8vICAgICAgID8gLTFcbiAgLy8gICAgICAgOiBiLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsID09PSBudWxsXG4gIC8vICAgICAgID8gMVxuICAvLyAgICAgICA6IGEucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwubG9jYWxlQ29tcGFyZShiLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsKSxcbiAgLy8gICApXG5cbiAgLy8gY29uc3QgZmlyc3RVaWQgPSBvcHRpb25zLnVpZFxuICAvLyBsZXQgc2tpcCA9ICEhZmlyc3RVaWRcbiAgLy8gZm9yIChjb25zdCB0ZXh0ZUxvaSBvZiB0ZXh0ZXNMb2lzKSB7XG4gIC8vICAgaWYgKHNraXApIHtcbiAgLy8gICAgIGlmICh0ZXh0ZUxvaS51aWQgPT09IGZpcnN0VWlkKSB7XG4gIC8vICAgICAgIHNraXAgPSBmYWxzZVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgY29udGludWVcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAvLyAgICAgY29uc29sZS5sb2coXG4gIC8vICAgICAgIGBSZXRyaWV2aW5nIGJpbGwgJHt0ZXh0ZUxvaS51aWR9IGF0ICR7dGV4dGVMb2kucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmx9YCxcbiAgLy8gICAgIClcbiAgLy8gICB9XG4gIC8vICAgaWYgKHRleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsID09PSBudWxsKSB7XG4gIC8vICAgICBjb250aW51ZVxuICAvLyAgIH1cbiAgLy8gICBjb25zdCB1cmwgPSBuZXcgVVJMKHRleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsKVxuICAvLyAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFEaXIsIHVybC5ob3N0bmFtZSwgLi4udXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKSlcbiAgLy8gICBhc3NlcnQuc3RyaWN0RXF1YWwodGV4dGVzTG9pc0RpciwgcGF0aC5kaXJuYW1lKGZpbGVQYXRoKSlcblxuICAvLyAgIGxldCBwYWdlID0gdW5kZWZpbmVkXG4gIC8vICAgdHJ5IHtcbiAgLy8gICAgIHBhZ2UgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KVxuICAvLyAgIH0gY2F0Y2ggKGUpIHtcbiAgLy8gICAgIGlmIChlLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgLy8gICAgICAgY29udGludWVcbiAgLy8gICAgIH1cbiAgLy8gICAgIHRocm93IGVcbiAgLy8gICB9XG5cbiAgLy8gICBpZiAob3B0aW9ucy5wYXJzZSkge1xuICAvLyAgICAgY29uc3QgdGV4dGVMb2lQYXJzZWQgPSBwYXJzZVRleHRlTG9pKHRleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsLCBwYWdlKVxuICAvLyAgICAgY29uc3QgeyBlcnJvciB9ID0gdGV4dGVMb2lQYXJzZWRcbiAgLy8gICAgIGlmIChlcnJvcikge1xuICAvLyAgICAgICBjb25zb2xlLmVycm9yKFxuICAvLyAgICAgICAgIGBFcnJvciB3aGlsZSBwYXJzaW5nIHBhZ2UgXCIke3RleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsfVwiICh1aWQ6ICR7XG4gIC8vICAgICAgICAgICB0ZXh0ZUxvaS51aWRcbiAgLy8gICAgICAgICB9KTpcXG5cXG5FcnJvcjpcXG4ke0pTT04uc3RyaW5naWZ5KGVycm9yLCBudWxsLCAyKX1gLFxuICAvLyAgICAgICApXG4gIC8vICAgICAgIGNvbnRpbnVlXG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG4gIC8vIGlmIGNvbW1pdEFuZFB1c2godGV4dGVzTG9pc0Rpciwgb3B0aW9ucy5jb21taXQsIG9wdGlvbnMucmVtb3RlKSB7XG4gIC8vICAgcHJvY2Vzcy5leGl0KDEpXG4gIC8vIH1cbiAgLy8gcmV0dXJuIHRleHRlc0xvaXNcbn1cblxucGFyc2VUZXh0ZXNMb2lzKClcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVBOztBQUNBOztBQUNBOztBQUlBOzs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUVBLElBQU1BLGtCQUFrQixHQUFHLENBQ3pCO0VBQ0VDLEtBQUssRUFBRSxHQURUO0VBRUVDLElBQUksRUFBRSxvQkFGUjtFQUdFQyxJQUFJLEVBQUUsUUFIUjtFQUlFQyxJQUFJLEVBQUVDO0FBSlIsQ0FEeUIsRUFPekI7RUFDRUosS0FBSyxFQUFFLEdBRFQ7RUFFRUMsSUFBSSxFQUFFLDJDQUZSO0VBR0VDLElBQUksRUFBRSxVQUhSO0VBSUVDLElBQUksRUFBRUU7QUFKUixDQVB5QixFQWF6QjtFQUNFTCxLQUFLLEVBQUUsR0FEVDtFQUVFTSxZQUFZLEVBQUUsSUFGaEI7RUFHRUosSUFBSSxFQUFFLGFBSFI7RUFJRUMsSUFBSSxFQUFFRTtBQUpSLENBYnlCLEVBbUJ6QjtFQUNFTCxLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsNkJBRlI7RUFHRU0sUUFBUSxFQUFFLElBSFo7RUFJRUwsSUFBSSxFQUFFLFFBSlI7RUFLRUMsSUFBSSxFQUFFRTtBQUxSLENBbkJ5QixFQTBCekI7RUFDRUwsS0FBSyxFQUFFLEdBRFQ7RUFFRUMsSUFBSSxFQUFFLG9CQUZSO0VBR0VDLElBQUksRUFBRSxRQUhSO0VBSUVDLElBQUksRUFBRUM7QUFKUixDQTFCeUIsRUFnQ3pCO0VBQ0VKLEtBQUssRUFBRSxHQURUO0VBRUVDLElBQUksRUFBRSxjQUZSO0VBR0VDLElBQUksRUFBRSxTQUhSO0VBSUVDLElBQUksRUFBRUM7QUFKUixDQWhDeUIsRUFzQ3pCO0VBQ0VJLGFBQWEsRUFBRSxJQURqQjtFQUVFUCxJQUFJLEVBQUUsZ0RBRlI7RUFHRUMsSUFBSSxFQUFFLFNBSFI7RUFJRUMsSUFBSSxFQUFFRTtBQUpSLENBdEN5QixDQUEzQjtBQTZDQSxJQUFNSSxPQUFPLEdBQUcsSUFBQUMsMkJBQUEsRUFBZ0JYLGtCQUFoQixDQUFoQixDLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTWSxlQUFULEdBQWlDO0VBQy9CLElBQUFDLGtCQUFBLEVBQ0UsQ0FBQ0gsT0FBTyxDQUFDSSxNQUFULElBQW1CSixPQUFPLENBQUNLLFFBRDdCLEVBRUUsZ0RBRkY7RUFLQSxJQUFNQyxPQUFPLEdBQUdOLE9BQU8sQ0FBQ00sT0FBeEIsQ0FOK0IsQ0FPL0I7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQSxJQUFNQyxhQUFhLEdBQUdDLGdCQUFBLENBQUtDLElBQUwsQ0FDcEJILE9BRG9CLEVBRXBCLDRCQUZvQixFQUdwQk4sT0FBTyxDQUFDVSxXQUhZLEVBSXBCLFFBSm9CLENBQXRCOztFQWIrQiwyQ0FtQlJDLG1CQUFBLENBQUdDLFdBQUgsQ0FBZUwsYUFBZixDQW5CUTtFQUFBOztFQUFBO0lBbUIvQixvREFBc0Q7TUFBQSxJQUEzQ0YsUUFBMkM7O01BQ3BELElBQUlBLFFBQVEsQ0FBQyxDQUFELENBQVIsS0FBZ0IsR0FBcEIsRUFBeUI7UUFDdkI7TUFDRDs7TUFDRCxJQUFJLENBQUNBLFFBQVEsQ0FBQ1EsUUFBVCxDQUFrQixNQUFsQixDQUFMLEVBQWdDO1FBQzlCO01BQ0Q7O01BQ0QsSUFBSWIsT0FBTyxDQUFDSyxRQUFSLElBQW9CLENBQUNBLFFBQVEsQ0FBQ1MsVUFBVCxDQUFvQmQsT0FBTyxDQUFDSyxRQUE1QixDQUF6QixFQUFnRTtRQUM5RDtNQUNEOztNQUNELElBQU1VLFlBQVksR0FBR1AsZ0JBQUEsQ0FBS0MsSUFBTCxDQUFVRixhQUFWLEVBQXlCRixRQUF6QixDQUFyQjs7TUFDQSxJQUFJLENBQUNMLE9BQU8sQ0FBQ2dCLE1BQWIsRUFBcUI7UUFDbkJDLE9BQU8sQ0FBQ0MsR0FBUixvQ0FBc0NILFlBQXRDO01BQ0Q7O01BQ0QsSUFBTUksWUFBWSxHQUFHUixtQkFBQSxDQUFHUyxZQUFILENBQWdCTCxZQUFoQixFQUE4QjtRQUFFTSxRQUFRLEVBQUU7TUFBWixDQUE5QixDQUFyQjs7TUFDQSxJQUFNQyxXQUFXLCtDQUF3Q3RCLE9BQU8sQ0FBQ1UsV0FBaEQscUJBQXNFTCxRQUF0RSxDQUFqQjtNQUNBLElBQU1rQixjQUFjLEdBQUcsSUFBQUMsd0JBQUEsRUFBY0YsV0FBZCxFQUEyQkgsWUFBM0IsQ0FBdkI7O01BQ0EsSUFBSW5CLE9BQU8sQ0FBQ0ssUUFBUixJQUFvQkwsT0FBTyxDQUFDeUIsT0FBaEMsRUFBeUM7UUFDdkNSLE9BQU8sQ0FBQ0MsR0FBUixDQUFZUSxJQUFJLENBQUNDLFNBQUwsQ0FBZUosY0FBYyxDQUFDSyxZQUE5QixFQUE0QyxJQUE1QyxFQUFrRCxDQUFsRCxDQUFaO01BQ0Q7O01BQ0QsSUFBUUMsS0FBUixHQUFrQk4sY0FBbEIsQ0FBUU0sS0FBUjs7TUFDQSxJQUFJQSxLQUFKLEVBQVc7UUFDVFosT0FBTyxDQUFDWSxLQUFSLHdDQUNpQ2QsWUFEakMsNEJBQzhEVyxJQUFJLENBQUNDLFNBQUwsQ0FDMURFLEtBRDBELEVBRTFELElBRjBELEVBRzFELENBSDBELENBRDlEO1FBT0E7TUFDRDtJQUNGLENBbEQ4QixDQW9EL0I7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTs7RUFqSStCO0lBQUE7RUFBQTtJQUFBO0VBQUE7QUFrSWhDOztBQUVEM0IsZUFBZSJ9
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import assert from "assert"; // import { execSync } from "child_process"
|
|
2
|
+
|
|
3
|
+
import commandLineArgs from "command-line-args";
|
|
4
|
+
import fs from "fs-extra";
|
|
5
|
+
import path from "path"; // import { EnabledDatasets } from "../datasets"
|
|
6
|
+
// import { loadAssembleeData } from "../loaders"
|
|
7
|
+
|
|
8
|
+
import { parseTexteLoi } from "../parsers/documents.mjs"; // import { Document, TypeDocument } from "../types/dossiers_legislatifs"
|
|
9
|
+
// import { DocumentUrlFormat, urlFromDocument } from "../urls"
|
|
10
|
+
|
|
11
|
+
const optionsDefinitions = [{
|
|
12
|
+
alias: "c",
|
|
13
|
+
help: "commit split files",
|
|
14
|
+
name: "commit",
|
|
15
|
+
type: Boolean
|
|
16
|
+
}, {
|
|
17
|
+
alias: "f",
|
|
18
|
+
help: "Filename of Assemblée's document to parse",
|
|
19
|
+
name: "filename",
|
|
20
|
+
type: String
|
|
21
|
+
}, {
|
|
22
|
+
alias: "l",
|
|
23
|
+
defaultValue: "16",
|
|
24
|
+
name: "legislature",
|
|
25
|
+
type: String
|
|
26
|
+
}, {
|
|
27
|
+
alias: "r",
|
|
28
|
+
help: "push commit to given remote",
|
|
29
|
+
multiple: true,
|
|
30
|
+
name: "remote",
|
|
31
|
+
type: String
|
|
32
|
+
}, {
|
|
33
|
+
alias: "s",
|
|
34
|
+
help: "don't log anything",
|
|
35
|
+
name: "silent",
|
|
36
|
+
type: Boolean
|
|
37
|
+
}, {
|
|
38
|
+
alias: "v",
|
|
39
|
+
help: "verbose logs",
|
|
40
|
+
name: "verbose",
|
|
41
|
+
type: Boolean
|
|
42
|
+
}, {
|
|
43
|
+
defaultOption: true,
|
|
44
|
+
help: "directory containing Assemblée open data files",
|
|
45
|
+
name: "dataDir",
|
|
46
|
+
type: String
|
|
47
|
+
}];
|
|
48
|
+
const options = commandLineArgs(optionsDefinitions); // function commitAndPush(repositoryDir: string, commit: boolean, remotes?: string[]): boolean {
|
|
49
|
+
// let error = false
|
|
50
|
+
// if (commit) {
|
|
51
|
+
// execSync(`git add .`, {
|
|
52
|
+
// cwd: repositoryDir,
|
|
53
|
+
// env: process.env,
|
|
54
|
+
// encoding: "utf-8",
|
|
55
|
+
// stdio: ["ignore", "ignore", "pipe"],
|
|
56
|
+
// })
|
|
57
|
+
// try {
|
|
58
|
+
// execSync('git commit -m "Nouvelle moisson"', {
|
|
59
|
+
// cwd: repositoryDir,
|
|
60
|
+
// env: process.env,
|
|
61
|
+
// encoding: "utf-8",
|
|
62
|
+
// })
|
|
63
|
+
// } catch (childProcess) {
|
|
64
|
+
// if (
|
|
65
|
+
// (childProcess as ChildProcess).stderr === null ||
|
|
66
|
+
// !/nothing to commit/.test((childProcess as any).stdout)
|
|
67
|
+
// ) {
|
|
68
|
+
// console.error((childProcess as any).output)
|
|
69
|
+
// throw childProcess
|
|
70
|
+
// }
|
|
71
|
+
// }
|
|
72
|
+
// for (const remote of remotes || []) {
|
|
73
|
+
// try {
|
|
74
|
+
// execSync(`git push ${remote} master`, {
|
|
75
|
+
// cwd: repositoryDir,
|
|
76
|
+
// env: process.env,
|
|
77
|
+
// encoding: "utf-8",
|
|
78
|
+
// stdio: ["ignore", "ignore", "pipe"],
|
|
79
|
+
// })
|
|
80
|
+
// } catch (childProcess) {
|
|
81
|
+
// // Don't stop when push fails.
|
|
82
|
+
// console.error((childProcess as any).output)
|
|
83
|
+
// error = true
|
|
84
|
+
// }
|
|
85
|
+
// }
|
|
86
|
+
// }
|
|
87
|
+
// return error
|
|
88
|
+
// }
|
|
89
|
+
|
|
90
|
+
function parseTextesLois() {
|
|
91
|
+
assert(!options.commit || options.filename, 'Options "commit" & "filename" are incompatible');
|
|
92
|
+
const dataDir = options.dataDir; // const { documentByUid } = loadAssembleeData(
|
|
93
|
+
// dataDir,
|
|
94
|
+
// EnabledDatasets.DossiersLegislatifs,
|
|
95
|
+
// options.legislature,
|
|
96
|
+
// )
|
|
97
|
+
|
|
98
|
+
const textesLoisDir = path.join(dataDir, "www.assemblee-nationale.fr", options.legislature, "textes");
|
|
99
|
+
|
|
100
|
+
for (const filename of fs.readdirSync(textesLoisDir)) {
|
|
101
|
+
if (filename[0] === ".") {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (!filename.endsWith(".asp")) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (options.filename && !filename.startsWith(options.filename)) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const texteLoiPath = path.join(textesLoisDir, filename);
|
|
114
|
+
|
|
115
|
+
if (!options.silent) {
|
|
116
|
+
console.log(`Parsing "texte de loi" ${texteLoiPath}…`);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const texteLoiPage = fs.readFileSync(texteLoiPath, {
|
|
120
|
+
encoding: "utf-8"
|
|
121
|
+
});
|
|
122
|
+
const texteLoiUrl = `http://www.assemblee-nationale.fr/${options.legislature}/textes/${filename}`;
|
|
123
|
+
const texteLoiParsed = parseTexteLoi(texteLoiUrl, texteLoiPage);
|
|
124
|
+
|
|
125
|
+
if (options.filename && options.verbose) {
|
|
126
|
+
console.log(JSON.stringify(texteLoiParsed.subdivisions, null, 2));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const {
|
|
130
|
+
error
|
|
131
|
+
} = texteLoiParsed;
|
|
132
|
+
|
|
133
|
+
if (error) {
|
|
134
|
+
console.error(` Error while parsing page "${texteLoiPath}":\n\nError:\n${JSON.stringify(error, null, 2)}`);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
} // fs.ensureDirSync(textesLoisDir)
|
|
138
|
+
// if (!options.uid) {
|
|
139
|
+
// for (const filename of fs.readdirSync(textesLoisDir)) {
|
|
140
|
+
// if (filename[0] === ".") {
|
|
141
|
+
// continue
|
|
142
|
+
// }
|
|
143
|
+
// fs.removeSync(path.join(textesLoisDir, filename))
|
|
144
|
+
// }
|
|
145
|
+
// }
|
|
146
|
+
// const textesLois = Object.values(documentByUid)
|
|
147
|
+
// .filter(document => document.xsiType === TypeDocument.TexteLoiType)
|
|
148
|
+
// .filter(
|
|
149
|
+
// document => document.uid.startsWith("PIONAN") || document.uid.startsWith("PRJLAN"),
|
|
150
|
+
// )
|
|
151
|
+
// .map(document => {
|
|
152
|
+
// return {
|
|
153
|
+
// ...document,
|
|
154
|
+
// rawDocumentAssembleeUrl: urlFromDocument(document, DocumentUrlFormat.RawHtml),
|
|
155
|
+
// }
|
|
156
|
+
// })
|
|
157
|
+
// .sort((a, b) =>
|
|
158
|
+
// a.rawDocumentAssembleeUrl === null
|
|
159
|
+
// ? -1
|
|
160
|
+
// : b.rawDocumentAssembleeUrl === null
|
|
161
|
+
// ? 1
|
|
162
|
+
// : a.rawDocumentAssembleeUrl.localeCompare(b.rawDocumentAssembleeUrl),
|
|
163
|
+
// )
|
|
164
|
+
// const firstUid = options.uid
|
|
165
|
+
// let skip = !!firstUid
|
|
166
|
+
// for (const texteLoi of textesLois) {
|
|
167
|
+
// if (skip) {
|
|
168
|
+
// if (texteLoi.uid === firstUid) {
|
|
169
|
+
// skip = false
|
|
170
|
+
// } else {
|
|
171
|
+
// continue
|
|
172
|
+
// }
|
|
173
|
+
// }
|
|
174
|
+
// if (!options.silent) {
|
|
175
|
+
// console.log(
|
|
176
|
+
// `Retrieving bill ${texteLoi.uid} at ${texteLoi.rawDocumentAssembleeUrl}`,
|
|
177
|
+
// )
|
|
178
|
+
// }
|
|
179
|
+
// if (texteLoi.rawDocumentAssembleeUrl === null) {
|
|
180
|
+
// continue
|
|
181
|
+
// }
|
|
182
|
+
// const url = new URL(texteLoi.rawDocumentAssembleeUrl)
|
|
183
|
+
// const filePath = path.join(dataDir, url.hostname, ...url.pathname.split("/"))
|
|
184
|
+
// assert.strictEqual(textesLoisDir, path.dirname(filePath))
|
|
185
|
+
// let page = undefined
|
|
186
|
+
// try {
|
|
187
|
+
// page = fs.readFileSync(filePath, { encoding: "utf-8" })
|
|
188
|
+
// } catch (e) {
|
|
189
|
+
// if (e.code === "ENOENT") {
|
|
190
|
+
// continue
|
|
191
|
+
// }
|
|
192
|
+
// throw e
|
|
193
|
+
// }
|
|
194
|
+
// if (options.parse) {
|
|
195
|
+
// const texteLoiParsed = parseTexteLoi(texteLoi.rawDocumentAssembleeUrl, page)
|
|
196
|
+
// const { error } = texteLoiParsed
|
|
197
|
+
// if (error) {
|
|
198
|
+
// console.error(
|
|
199
|
+
// `Error while parsing page "${texteLoi.rawDocumentAssembleeUrl}" (uid: ${
|
|
200
|
+
// texteLoi.uid
|
|
201
|
+
// }):\n\nError:\n${JSON.stringify(error, null, 2)}`,
|
|
202
|
+
// )
|
|
203
|
+
// continue
|
|
204
|
+
// }
|
|
205
|
+
// }
|
|
206
|
+
// }
|
|
207
|
+
// if commitAndPush(textesLoisDir, options.commit, options.remote) {
|
|
208
|
+
// process.exit(1)
|
|
209
|
+
// }
|
|
210
|
+
// return textesLois
|
|
211
|
+
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
parseTextesLois();
|
|
215
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjb21tYW5kTGluZUFyZ3MiLCJmcyIsInBhdGgiLCJwYXJzZVRleHRlTG9pIiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJCb29sZWFuIiwiU3RyaW5nIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsInBhcnNlVGV4dGVzTG9pcyIsImNvbW1pdCIsImZpbGVuYW1lIiwiZGF0YURpciIsInRleHRlc0xvaXNEaXIiLCJqb2luIiwibGVnaXNsYXR1cmUiLCJyZWFkZGlyU3luYyIsImVuZHNXaXRoIiwic3RhcnRzV2l0aCIsInRleHRlTG9pUGF0aCIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJ0ZXh0ZUxvaVBhZ2UiLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsInRleHRlTG9pVXJsIiwidGV4dGVMb2lQYXJzZWQiLCJ2ZXJib3NlIiwiSlNPTiIsInN0cmluZ2lmeSIsInN1YmRpdmlzaW9ucyIsImVycm9yIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcGFyc2VfdGV4dGVzX2xvaXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbi8vIGltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbi8vIGltcG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG4vLyBpbXBvcnQgeyBsb2FkQXNzZW1ibGVlRGF0YSB9IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7IHBhcnNlVGV4dGVMb2kgfSBmcm9tIFwiLi4vcGFyc2Vycy9kb2N1bWVudHNcIlxuLy8gaW1wb3J0IHsgRG9jdW1lbnQsIFR5cGVEb2N1bWVudCB9IGZyb20gXCIuLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG4vLyBpbXBvcnQgeyBEb2N1bWVudFVybEZvcm1hdCwgdXJsRnJvbURvY3VtZW50IH0gZnJvbSBcIi4uL3VybHNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgc3BsaXQgZmlsZXNcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJmXCIsXG4gICAgaGVscDogXCJGaWxlbmFtZSBvZiBBc3NlbWJsw6llJ3MgZG9jdW1lbnQgdG8gcGFyc2VcIixcbiAgICBuYW1lOiBcImZpbGVuYW1lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwibFwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCIxNlwiLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuLy8gZnVuY3Rpb24gY29tbWl0QW5kUHVzaChyZXBvc2l0b3J5RGlyOiBzdHJpbmcsIGNvbW1pdDogYm9vbGVhbiwgcmVtb3Rlcz86IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4vLyAgIGxldCBlcnJvciA9IGZhbHNlXG4vLyAgIGlmIChjb21taXQpIHtcbi8vICAgICBleGVjU3luYyhgZ2l0IGFkZCAuYCwge1xuLy8gICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuLy8gICAgICAgZW52OiBwcm9jZXNzLmVudixcbi8vICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4vLyAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbi8vICAgICB9KVxuLy8gICAgIHRyeSB7XG4vLyAgICAgICBleGVjU3luYygnZ2l0IGNvbW1pdCAtbSBcIk5vdXZlbGxlIG1vaXNzb25cIicsIHtcbi8vICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuLy8gICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuLy8gICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuLy8gICAgICAgfSlcbi8vICAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbi8vICAgICAgIGlmIChcbi8vICAgICAgICAgKGNoaWxkUHJvY2VzcyBhcyBDaGlsZFByb2Nlc3MpLnN0ZGVyciA9PT0gbnVsbCB8fFxuLy8gICAgICAgICAhL25vdGhpbmcgdG8gY29tbWl0Ly50ZXN0KChjaGlsZFByb2Nlc3MgYXMgYW55KS5zdGRvdXQpXG4vLyAgICAgICApIHtcbi8vICAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuLy8gICAgICAgICB0aHJvdyBjaGlsZFByb2Nlc3Ncbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuLy8gICAgICAgdHJ5IHtcbi8vICAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4vLyAgICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuLy8gICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4vLyAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbi8vICAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbi8vICAgICAgICAgfSlcbi8vICAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuLy8gICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbi8vICAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuLy8gICAgICAgICBlcnJvciA9IHRydWVcbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgIH1cbi8vICAgcmV0dXJuIGVycm9yXG4vLyB9XG5cbmZ1bmN0aW9uIHBhcnNlVGV4dGVzTG9pcygpOiB2b2lkIHtcbiAgYXNzZXJ0KFxuICAgICFvcHRpb25zLmNvbW1pdCB8fCBvcHRpb25zLmZpbGVuYW1lLFxuICAgICdPcHRpb25zIFwiY29tbWl0XCIgJiBcImZpbGVuYW1lXCIgYXJlIGluY29tcGF0aWJsZScsXG4gIClcblxuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIC8vIGNvbnN0IHsgZG9jdW1lbnRCeVVpZCB9ID0gbG9hZEFzc2VtYmxlZURhdGEoXG4gIC8vICAgZGF0YURpcixcbiAgLy8gICBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcyxcbiAgLy8gICBvcHRpb25zLmxlZ2lzbGF0dXJlLFxuICAvLyApXG5cbiAgY29uc3QgdGV4dGVzTG9pc0RpciA9IHBhdGguam9pbihcbiAgICBkYXRhRGlyLFxuICAgIFwid3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnJcIixcbiAgICBvcHRpb25zLmxlZ2lzbGF0dXJlLFxuICAgIFwidGV4dGVzXCIsXG4gIClcbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyh0ZXh0ZXNMb2lzRGlyKSkge1xuICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmICghZmlsZW5hbWUuZW5kc1dpdGgoXCIuYXNwXCIpKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5maWxlbmFtZSAmJiAhZmlsZW5hbWUuc3RhcnRzV2l0aChvcHRpb25zLmZpbGVuYW1lKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgdGV4dGVMb2lQYXRoID0gcGF0aC5qb2luKHRleHRlc0xvaXNEaXIsIGZpbGVuYW1lKVxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBQYXJzaW5nIFwidGV4dGUgZGUgbG9pXCIgJHt0ZXh0ZUxvaVBhdGh94oCmYClcbiAgICB9XG4gICAgY29uc3QgdGV4dGVMb2lQYWdlID0gZnMucmVhZEZpbGVTeW5jKHRleHRlTG9pUGF0aCwgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0pXG4gICAgY29uc3QgdGV4dGVMb2lVcmwgPSBgaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLyR7b3B0aW9ucy5sZWdpc2xhdHVyZX0vdGV4dGVzLyR7ZmlsZW5hbWV9YFxuICAgIGNvbnN0IHRleHRlTG9pUGFyc2VkID0gcGFyc2VUZXh0ZUxvaSh0ZXh0ZUxvaVVybCwgdGV4dGVMb2lQYWdlKVxuICAgIGlmIChvcHRpb25zLmZpbGVuYW1lICYmIG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGV4dGVMb2lQYXJzZWQuc3ViZGl2aXNpb25zLCBudWxsLCAyKSlcbiAgICB9XG4gICAgY29uc3QgeyBlcnJvciB9ID0gdGV4dGVMb2lQYXJzZWRcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGAgIEVycm9yIHdoaWxlIHBhcnNpbmcgcGFnZSBcIiR7dGV4dGVMb2lQYXRofVwiOlxcblxcbkVycm9yOlxcbiR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyLFxuICAgICAgICApfWAsXG4gICAgICApXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgfVxuXG4gIC8vIGZzLmVuc3VyZURpclN5bmModGV4dGVzTG9pc0RpcilcbiAgLy8gaWYgKCFvcHRpb25zLnVpZCkge1xuICAvLyAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmModGV4dGVzTG9pc0RpcikpIHtcbiAgLy8gICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgLy8gICAgICAgY29udGludWVcbiAgLy8gICAgIH1cbiAgLy8gICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKHRleHRlc0xvaXNEaXIsIGZpbGVuYW1lKSlcbiAgLy8gICB9XG4gIC8vIH1cblxuICAvLyBjb25zdCB0ZXh0ZXNMb2lzID0gT2JqZWN0LnZhbHVlcyhkb2N1bWVudEJ5VWlkKVxuICAvLyAgIC5maWx0ZXIoZG9jdW1lbnQgPT4gZG9jdW1lbnQueHNpVHlwZSA9PT0gVHlwZURvY3VtZW50LlRleHRlTG9pVHlwZSlcbiAgLy8gICAuZmlsdGVyKFxuICAvLyAgICAgZG9jdW1lbnQgPT4gZG9jdW1lbnQudWlkLnN0YXJ0c1dpdGgoXCJQSU9OQU5cIikgfHwgZG9jdW1lbnQudWlkLnN0YXJ0c1dpdGgoXCJQUkpMQU5cIiksXG4gIC8vICAgKVxuICAvLyAgIC5tYXAoZG9jdW1lbnQgPT4ge1xuICAvLyAgICAgcmV0dXJuIHtcbiAgLy8gICAgICAgLi4uZG9jdW1lbnQsXG4gIC8vICAgICAgIHJhd0RvY3VtZW50QXNzZW1ibGVlVXJsOiB1cmxGcm9tRG9jdW1lbnQoZG9jdW1lbnQsIERvY3VtZW50VXJsRm9ybWF0LlJhd0h0bWwpLFxuICAvLyAgICAgfVxuICAvLyAgIH0pXG4gIC8vICAgLnNvcnQoKGEsIGIpID0+XG4gIC8vICAgICBhLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsID09PSBudWxsXG4gIC8vICAgICAgID8gLTFcbiAgLy8gICAgICAgOiBiLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsID09PSBudWxsXG4gIC8vICAgICAgID8gMVxuICAvLyAgICAgICA6IGEucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwubG9jYWxlQ29tcGFyZShiLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsKSxcbiAgLy8gICApXG5cbiAgLy8gY29uc3QgZmlyc3RVaWQgPSBvcHRpb25zLnVpZFxuICAvLyBsZXQgc2tpcCA9ICEhZmlyc3RVaWRcbiAgLy8gZm9yIChjb25zdCB0ZXh0ZUxvaSBvZiB0ZXh0ZXNMb2lzKSB7XG4gIC8vICAgaWYgKHNraXApIHtcbiAgLy8gICAgIGlmICh0ZXh0ZUxvaS51aWQgPT09IGZpcnN0VWlkKSB7XG4gIC8vICAgICAgIHNraXAgPSBmYWxzZVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgY29udGludWVcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAvLyAgICAgY29uc29sZS5sb2coXG4gIC8vICAgICAgIGBSZXRyaWV2aW5nIGJpbGwgJHt0ZXh0ZUxvaS51aWR9IGF0ICR7dGV4dGVMb2kucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmx9YCxcbiAgLy8gICAgIClcbiAgLy8gICB9XG4gIC8vICAgaWYgKHRleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsID09PSBudWxsKSB7XG4gIC8vICAgICBjb250aW51ZVxuICAvLyAgIH1cbiAgLy8gICBjb25zdCB1cmwgPSBuZXcgVVJMKHRleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsKVxuICAvLyAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFEaXIsIHVybC5ob3N0bmFtZSwgLi4udXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKSlcbiAgLy8gICBhc3NlcnQuc3RyaWN0RXF1YWwodGV4dGVzTG9pc0RpciwgcGF0aC5kaXJuYW1lKGZpbGVQYXRoKSlcblxuICAvLyAgIGxldCBwYWdlID0gdW5kZWZpbmVkXG4gIC8vICAgdHJ5IHtcbiAgLy8gICAgIHBhZ2UgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KVxuICAvLyAgIH0gY2F0Y2ggKGUpIHtcbiAgLy8gICAgIGlmIChlLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgLy8gICAgICAgY29udGludWVcbiAgLy8gICAgIH1cbiAgLy8gICAgIHRocm93IGVcbiAgLy8gICB9XG5cbiAgLy8gICBpZiAob3B0aW9ucy5wYXJzZSkge1xuICAvLyAgICAgY29uc3QgdGV4dGVMb2lQYXJzZWQgPSBwYXJzZVRleHRlTG9pKHRleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsLCBwYWdlKVxuICAvLyAgICAgY29uc3QgeyBlcnJvciB9ID0gdGV4dGVMb2lQYXJzZWRcbiAgLy8gICAgIGlmIChlcnJvcikge1xuICAvLyAgICAgICBjb25zb2xlLmVycm9yKFxuICAvLyAgICAgICAgIGBFcnJvciB3aGlsZSBwYXJzaW5nIHBhZ2UgXCIke3RleHRlTG9pLnJhd0RvY3VtZW50QXNzZW1ibGVlVXJsfVwiICh1aWQ6ICR7XG4gIC8vICAgICAgICAgICB0ZXh0ZUxvaS51aWRcbiAgLy8gICAgICAgICB9KTpcXG5cXG5FcnJvcjpcXG4ke0pTT04uc3RyaW5naWZ5KGVycm9yLCBudWxsLCAyKX1gLFxuICAvLyAgICAgICApXG4gIC8vICAgICAgIGNvbnRpbnVlXG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG4gIC8vIGlmIGNvbW1pdEFuZFB1c2godGV4dGVzTG9pc0Rpciwgb3B0aW9ucy5jb21taXQsIG9wdGlvbnMucmVtb3RlKSB7XG4gIC8vICAgcHJvY2Vzcy5leGl0KDEpXG4gIC8vIH1cbiAgLy8gcmV0dXJuIHRleHRlc0xvaXNcbn1cblxucGFyc2VUZXh0ZXNMb2lzKClcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBUCxNQUFtQixRQUFuQixDLENBQ0E7O0FBQ0EsT0FBT0MsZUFBUCxNQUE0QixtQkFBNUI7QUFDQSxPQUFPQyxFQUFQLE1BQWUsVUFBZjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsTUFBakIsQyxDQUVBO0FBQ0E7O1NBQ1NDLGEsb0NBQ1Q7QUFDQTs7QUFFQSxNQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsb0JBRlI7RUFHRUMsSUFBSSxFQUFFLFFBSFI7RUFJRUMsSUFBSSxFQUFFQztBQUpSLENBRHlCLEVBT3pCO0VBQ0VKLEtBQUssRUFBRSxHQURUO0VBRUVDLElBQUksRUFBRSwyQ0FGUjtFQUdFQyxJQUFJLEVBQUUsVUFIUjtFQUlFQyxJQUFJLEVBQUVFO0FBSlIsQ0FQeUIsRUFhekI7RUFDRUwsS0FBSyxFQUFFLEdBRFQ7RUFFRU0sWUFBWSxFQUFFLElBRmhCO0VBR0VKLElBQUksRUFBRSxhQUhSO0VBSUVDLElBQUksRUFBRUU7QUFKUixDQWJ5QixFQW1CekI7RUFDRUwsS0FBSyxFQUFFLEdBRFQ7RUFFRUMsSUFBSSxFQUFFLDZCQUZSO0VBR0VNLFFBQVEsRUFBRSxJQUhaO0VBSUVMLElBQUksRUFBRSxRQUpSO0VBS0VDLElBQUksRUFBRUU7QUFMUixDQW5CeUIsRUEwQnpCO0VBQ0VMLEtBQUssRUFBRSxHQURUO0VBRUVDLElBQUksRUFBRSxvQkFGUjtFQUdFQyxJQUFJLEVBQUUsUUFIUjtFQUlFQyxJQUFJLEVBQUVDO0FBSlIsQ0ExQnlCLEVBZ0N6QjtFQUNFSixLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsY0FGUjtFQUdFQyxJQUFJLEVBQUUsU0FIUjtFQUlFQyxJQUFJLEVBQUVDO0FBSlIsQ0FoQ3lCLEVBc0N6QjtFQUNFSSxhQUFhLEVBQUUsSUFEakI7RUFFRVAsSUFBSSxFQUFFLGdEQUZSO0VBR0VDLElBQUksRUFBRSxTQUhSO0VBSUVDLElBQUksRUFBRUU7QUFKUixDQXRDeUIsQ0FBM0I7QUE2Q0EsTUFBTUksT0FBTyxHQUFHZCxlQUFlLENBQUNJLGtCQUFELENBQS9CLEMsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVNXLGVBQVQsR0FBaUM7RUFDL0JoQixNQUFNLENBQ0osQ0FBQ2UsT0FBTyxDQUFDRSxNQUFULElBQW1CRixPQUFPLENBQUNHLFFBRHZCLEVBRUosZ0RBRkksQ0FBTjtFQUtBLE1BQU1DLE9BQU8sR0FBR0osT0FBTyxDQUFDSSxPQUF4QixDQU4rQixDQU8vQjtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBLE1BQU1DLGFBQWEsR0FBR2pCLElBQUksQ0FBQ2tCLElBQUwsQ0FDcEJGLE9BRG9CLEVBRXBCLDRCQUZvQixFQUdwQkosT0FBTyxDQUFDTyxXQUhZLEVBSXBCLFFBSm9CLENBQXRCOztFQU1BLEtBQUssTUFBTUosUUFBWCxJQUF1QmhCLEVBQUUsQ0FBQ3FCLFdBQUgsQ0FBZUgsYUFBZixDQUF2QixFQUFzRDtJQUNwRCxJQUFJRixRQUFRLENBQUMsQ0FBRCxDQUFSLEtBQWdCLEdBQXBCLEVBQXlCO01BQ3ZCO0lBQ0Q7O0lBQ0QsSUFBSSxDQUFDQSxRQUFRLENBQUNNLFFBQVQsQ0FBa0IsTUFBbEIsQ0FBTCxFQUFnQztNQUM5QjtJQUNEOztJQUNELElBQUlULE9BQU8sQ0FBQ0csUUFBUixJQUFvQixDQUFDQSxRQUFRLENBQUNPLFVBQVQsQ0FBb0JWLE9BQU8sQ0FBQ0csUUFBNUIsQ0FBekIsRUFBZ0U7TUFDOUQ7SUFDRDs7SUFDRCxNQUFNUSxZQUFZLEdBQUd2QixJQUFJLENBQUNrQixJQUFMLENBQVVELGFBQVYsRUFBeUJGLFFBQXpCLENBQXJCOztJQUNBLElBQUksQ0FBQ0gsT0FBTyxDQUFDWSxNQUFiLEVBQXFCO01BQ25CQyxPQUFPLENBQUNDLEdBQVIsQ0FBYSwwQkFBeUJILFlBQWEsR0FBbkQ7SUFDRDs7SUFDRCxNQUFNSSxZQUFZLEdBQUc1QixFQUFFLENBQUM2QixZQUFILENBQWdCTCxZQUFoQixFQUE4QjtNQUFFTSxRQUFRLEVBQUU7SUFBWixDQUE5QixDQUFyQjtJQUNBLE1BQU1DLFdBQVcsR0FBSSxxQ0FBb0NsQixPQUFPLENBQUNPLFdBQVksV0FBVUosUUFBUyxFQUFoRztJQUNBLE1BQU1nQixjQUFjLEdBQUc5QixhQUFhLENBQUM2QixXQUFELEVBQWNILFlBQWQsQ0FBcEM7O0lBQ0EsSUFBSWYsT0FBTyxDQUFDRyxRQUFSLElBQW9CSCxPQUFPLENBQUNvQixPQUFoQyxFQUF5QztNQUN2Q1AsT0FBTyxDQUFDQyxHQUFSLENBQVlPLElBQUksQ0FBQ0MsU0FBTCxDQUFlSCxjQUFjLENBQUNJLFlBQTlCLEVBQTRDLElBQTVDLEVBQWtELENBQWxELENBQVo7SUFDRDs7SUFDRCxNQUFNO01BQUVDO0lBQUYsSUFBWUwsY0FBbEI7O0lBQ0EsSUFBSUssS0FBSixFQUFXO01BQ1RYLE9BQU8sQ0FBQ1csS0FBUixDQUNHLCtCQUE4QmIsWUFBYSxpQkFBZ0JVLElBQUksQ0FBQ0MsU0FBTCxDQUMxREUsS0FEMEQsRUFFMUQsSUFGMEQsRUFHMUQsQ0FIMEQsQ0FJMUQsRUFMSjtNQU9BO0lBQ0Q7RUFDRixDQWxEOEIsQ0FvRC9CO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0Q7O0FBRUR2QixlQUFlIn0=
|