@speleotica/frcsdata 4.0.3 → 4.1.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 (45) hide show
  1. package/FrcsPlotFile.d.ts +1 -1
  2. package/FrcsPlotShot.d.ts +1 -1
  3. package/FrcsShot.d.ts +1 -1
  4. package/FrcsShot.js +2 -3
  5. package/FrcsSurveyFile.d.ts +1 -1
  6. package/FrcsTrip.d.ts +2 -2
  7. package/FrcsTripSummary.d.ts +1 -1
  8. package/FrcsTripSummaryFile.d.ts +1 -1
  9. package/formatFrcsShot.js +7 -6
  10. package/index.js +11 -11
  11. package/node/index.js +6 -9
  12. package/package.json +30 -124
  13. package/parseFrcsPlotFile.js +4 -3
  14. package/parseFrcsSurveyFile.js +13 -12
  15. package/parseFrcsTripSummaryFile.js +5 -4
  16. package/string/index.js +8 -11
  17. package/web/index.d.ts +12 -0
  18. package/web/index.js +71 -0
  19. package/es/FrcsPlotFile.js +0 -6
  20. package/es/FrcsPlotShot.js +0 -6
  21. package/es/FrcsShot.js +0 -14
  22. package/es/FrcsSurveyFile.js +0 -6
  23. package/es/FrcsTrip.js +0 -6
  24. package/es/FrcsTripSummary.js +0 -6
  25. package/es/FrcsTripSummaryFile.js +0 -6
  26. package/es/formatFrcsShot.js +0 -75
  27. package/es/formatFrcsShot.spec.js +0 -141
  28. package/es/index.js +0 -96
  29. package/es/node/index.js +0 -20
  30. package/es/node/parseFrcsPlotFile.spec.js +0 -167
  31. package/es/node/parseFrcsSurveyFile.spec.js +0 -314
  32. package/es/node/parseFrcsTripSummaryFile.spec.js +0 -78
  33. package/es/parseFrcsPlotFile.js +0 -135
  34. package/es/parseFrcsSurveyFile.js +0 -503
  35. package/es/parseFrcsTripSummaryFile.js +0 -73
  36. package/es/string/index.js +0 -21
  37. package/es/string/parseFrcsPlotFile.spec.js +0 -179
  38. package/es/string/parseFrcsSurveyFile.spec.js +0 -646
  39. package/formatFrcsShot.spec.js +0 -139
  40. package/node/parseFrcsPlotFile.spec.js +0 -181
  41. package/node/parseFrcsSurveyFile.spec.js +0 -328
  42. package/node/parseFrcsTripSummaryFile.spec.js +0 -104
  43. package/string/parseFrcsPlotFile.spec.js +0 -182
  44. package/string/parseFrcsSurveyFile.spec.js +0 -673
  45. package/yarn.lock +0 -9542
@@ -1,78 +0,0 @@
1
- "use strict";
2
-
3
- var _mocha = require("mocha");
4
- var _chai = require("chai");
5
- var _index = require("./index");
6
- var _unitized = require("@speleotica/unitized");
7
- (0, _mocha.describe)('parseFrcsTripSummaryFile', function () {
8
- (0, _mocha.it)('basic test', async function () {
9
- const parsed = await (0, _index.parseFrcsTripSummaryFile)(require.resolve('./STAT_sum.txt'));
10
- (0, _chai.expect)(parsed).to.deep.equal({
11
- errors: [],
12
- tripSummaries: [{
13
- tripNumber: 1,
14
- tripIndex: 0,
15
- date: new Date(81, 1, 15),
16
- totalLength: _unitized.Unitize.feet(258.6),
17
- numShots: 17,
18
- name: 'ENTRANCE DROPS, JOE\'S "I LOVE MY WIFE TRAVERSE", TRICKY TRAVERSE',
19
- excludedLength: _unitized.Unitize.feet(0),
20
- numExcludedShots: 0,
21
- team: ['Peter Quick', 'Keith Ortiz'],
22
- shots: ['A1', 'AD1-AD3', 'AE1', 'AE1 SIDE', 'AE9 SIDE', 'AE10-AE9', 'AE13 SIDE', 'AE15 SIDE', 'AE20-AE11']
23
- }, {
24
- tripNumber: 2,
25
- tripIndex: 1,
26
- date: new Date(81, 1, 14),
27
- totalLength: _unitized.Unitize.feet(1133.75),
28
- numShots: 55,
29
- name: 'TRICKY TRAVERSE AND THEN FIRST SURVEY IN UPPER CROWLWAY',
30
- excludedLength: _unitized.Unitize.feet(0),
31
- numExcludedShots: 0,
32
- team: ['Dan Crowl', 'Keith Ortiz', 'Chip Hopper', 'Peter Quick', 'Larry Bean'],
33
- shots: ['A1-A56']
34
- }, {
35
- tripNumber: 3,
36
- tripIndex: 2,
37
- date: new Date(81, 2, 6),
38
- totalLength: _unitized.Unitize.feet(2371.2),
39
- numShots: 61,
40
- name: "DOUG'S DEMISE (50 FT DROP), CHRIS CROSS, CRAWL ABOVE DROP",
41
- excludedLength: _unitized.Unitize.feet(0),
42
- numExcludedShots: 0,
43
- team: ['Peter Quick', 'Chris Gerace', 'Phil Oden', 'Chip Hopper'],
44
- shots: ['A13 SIDE', 'B1-B5', 'B2 SIDE', 'B3 SIDE', 'B6-B18', 'B17 SIDE', 'B19-B38', 'B32 SIDE', 'BS1-BS5', 'C1-C18']
45
- }]
46
- });
47
- });
48
- (0, _mocha.it)('old format', async function () {
49
- const parsed = await (0, _index.parseFrcsTripSummaryFile)(require.resolve('./STAT_sum_old.txt'));
50
- (0, _chai.expect)(parsed).to.deep.equal({
51
- errors: [],
52
- tripSummaries: [{
53
- tripNumber: 1,
54
- tripIndex: 0,
55
- date: new Date(81, 1, 15),
56
- totalLength: _unitized.Unitize.feet(258.6),
57
- numShots: 17,
58
- name: 'ENTRANCE DROPS, JOE\'S "I LOVE MY WIFE TRAVERSE", TRICKY TRAVERSE',
59
- excludedLength: _unitized.Unitize.feet(0),
60
- numExcludedShots: 0,
61
- team: ['Peter Quick', 'Keith Ortiz'],
62
- shots: ['A1', 'AD1-AD3', 'AE1', 'AE1 SIDE', 'AE9 SIDE', 'AE10-AE9', 'AE13 SIDE', 'AE15 SIDE', 'AE20-AE11']
63
- }, undefined, {
64
- tripNumber: 3,
65
- tripIndex: 2,
66
- date: new Date(81, 2, 6),
67
- totalLength: _unitized.Unitize.feet(2371.2),
68
- numShots: 61,
69
- name: "DOUG'S DEMISE (50 FT DROP), CHRIS CROSS, CRAWL ABOVE DROP",
70
- excludedLength: _unitized.Unitize.feet(0),
71
- numExcludedShots: 0,
72
- team: ['Peter Quick', 'Chris Gerace', 'Phil Oden', 'Chip Hopper'],
73
- shots: ['A13 SIDE', 'B1-B5', 'B2 SIDE', 'B3 SIDE', 'B6-B18', 'B17 SIDE', 'B19-B38', 'B32 SIDE', 'BS1-BS5', 'C1-C18']
74
- }]
75
- });
76
- });
77
- });
78
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9jaGEiLCJyZXF1aXJlIiwiX2NoYWkiLCJfaW5kZXgiLCJfdW5pdGl6ZWQiLCJkZXNjcmliZSIsIml0IiwicGFyc2VkIiwicGFyc2VGcmNzVHJpcFN1bW1hcnlGaWxlIiwicmVzb2x2ZSIsImV4cGVjdCIsInRvIiwiZGVlcCIsImVxdWFsIiwiZXJyb3JzIiwidHJpcFN1bW1hcmllcyIsInRyaXBOdW1iZXIiLCJ0cmlwSW5kZXgiLCJkYXRlIiwiRGF0ZSIsInRvdGFsTGVuZ3RoIiwiVW5pdGl6ZSIsImZlZXQiLCJudW1TaG90cyIsIm5hbWUiLCJleGNsdWRlZExlbmd0aCIsIm51bUV4Y2x1ZGVkU2hvdHMiLCJ0ZWFtIiwic2hvdHMiLCJ1bmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbm9kZS9wYXJzZUZyY3NUcmlwU3VtbWFyeUZpbGUuc3BlYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQgfSBmcm9tICdtb2NoYSdcbmltcG9ydCB7IGV4cGVjdCB9IGZyb20gJ2NoYWknXG5pbXBvcnQgeyBwYXJzZUZyY3NUcmlwU3VtbWFyeUZpbGUgfSBmcm9tICcuL2luZGV4J1xuaW1wb3J0IHsgVW5pdGl6ZSB9IGZyb20gJ0BzcGVsZW90aWNhL3VuaXRpemVkJ1xuXG5kZXNjcmliZSgncGFyc2VGcmNzVHJpcFN1bW1hcnlGaWxlJywgZnVuY3Rpb24oKSB7XG4gIGl0KCdiYXNpYyB0ZXN0JywgYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VGcmNzVHJpcFN1bW1hcnlGaWxlKFxuICAgICAgcmVxdWlyZS5yZXNvbHZlKCcuL1NUQVRfc3VtLnR4dCcpXG4gICAgKVxuICAgIGV4cGVjdChwYXJzZWQpLnRvLmRlZXAuZXF1YWwoe1xuICAgICAgZXJyb3JzOiBbXSxcbiAgICAgIHRyaXBTdW1tYXJpZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRyaXBOdW1iZXI6IDEsXG4gICAgICAgICAgdHJpcEluZGV4OiAwLFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKDgxLCAxLCAxNSksXG4gICAgICAgICAgdG90YWxMZW5ndGg6IFVuaXRpemUuZmVldCgyNTguNiksXG4gICAgICAgICAgbnVtU2hvdHM6IDE3LFxuICAgICAgICAgIG5hbWU6XG4gICAgICAgICAgICAnRU5UUkFOQ0UgRFJPUFMsIEpPRVxcJ1MgXCJJIExPVkUgTVkgV0lGRSBUUkFWRVJTRVwiLCBUUklDS1kgVFJBVkVSU0UnLFxuICAgICAgICAgIGV4Y2x1ZGVkTGVuZ3RoOiBVbml0aXplLmZlZXQoMCksXG4gICAgICAgICAgbnVtRXhjbHVkZWRTaG90czogMCxcbiAgICAgICAgICB0ZWFtOiBbJ1BldGVyIFF1aWNrJywgJ0tlaXRoIE9ydGl6J10sXG4gICAgICAgICAgc2hvdHM6IFtcbiAgICAgICAgICAgICdBMScsXG4gICAgICAgICAgICAnQUQxLUFEMycsXG4gICAgICAgICAgICAnQUUxJyxcbiAgICAgICAgICAgICdBRTEgU0lERScsXG4gICAgICAgICAgICAnQUU5IFNJREUnLFxuICAgICAgICAgICAgJ0FFMTAtQUU5JyxcbiAgICAgICAgICAgICdBRTEzIFNJREUnLFxuICAgICAgICAgICAgJ0FFMTUgU0lERScsXG4gICAgICAgICAgICAnQUUyMC1BRTExJyxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHJpcE51bWJlcjogMixcbiAgICAgICAgICB0cmlwSW5kZXg6IDEsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoODEsIDEsIDE0KSxcbiAgICAgICAgICB0b3RhbExlbmd0aDogVW5pdGl6ZS5mZWV0KDExMzMuNzUpLFxuICAgICAgICAgIG51bVNob3RzOiA1NSxcbiAgICAgICAgICBuYW1lOiAnVFJJQ0tZIFRSQVZFUlNFIEFORCBUSEVOIEZJUlNUIFNVUlZFWSBJTiBVUFBFUiBDUk9XTFdBWScsXG4gICAgICAgICAgZXhjbHVkZWRMZW5ndGg6IFVuaXRpemUuZmVldCgwKSxcbiAgICAgICAgICBudW1FeGNsdWRlZFNob3RzOiAwLFxuICAgICAgICAgIHRlYW06IFtcbiAgICAgICAgICAgICdEYW4gQ3Jvd2wnLFxuICAgICAgICAgICAgJ0tlaXRoIE9ydGl6JyxcbiAgICAgICAgICAgICdDaGlwIEhvcHBlcicsXG4gICAgICAgICAgICAnUGV0ZXIgUXVpY2snLFxuICAgICAgICAgICAgJ0xhcnJ5IEJlYW4nLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2hvdHM6IFsnQTEtQTU2J10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0cmlwTnVtYmVyOiAzLFxuICAgICAgICAgIHRyaXBJbmRleDogMixcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSg4MSwgMiwgNiksXG4gICAgICAgICAgdG90YWxMZW5ndGg6IFVuaXRpemUuZmVldCgyMzcxLjIpLFxuICAgICAgICAgIG51bVNob3RzOiA2MSxcbiAgICAgICAgICBuYW1lOiBcIkRPVUcnUyBERU1JU0UgKDUwIEZUIERST1ApLCBDSFJJUyBDUk9TUywgQ1JBV0wgQUJPVkUgRFJPUFwiLFxuICAgICAgICAgIGV4Y2x1ZGVkTGVuZ3RoOiBVbml0aXplLmZlZXQoMCksXG4gICAgICAgICAgbnVtRXhjbHVkZWRTaG90czogMCxcbiAgICAgICAgICB0ZWFtOiBbJ1BldGVyIFF1aWNrJywgJ0NocmlzIEdlcmFjZScsICdQaGlsIE9kZW4nLCAnQ2hpcCBIb3BwZXInXSxcbiAgICAgICAgICBzaG90czogW1xuICAgICAgICAgICAgJ0ExMyBTSURFJyxcbiAgICAgICAgICAgICdCMS1CNScsXG4gICAgICAgICAgICAnQjIgU0lERScsXG4gICAgICAgICAgICAnQjMgU0lERScsXG4gICAgICAgICAgICAnQjYtQjE4JyxcbiAgICAgICAgICAgICdCMTcgU0lERScsXG4gICAgICAgICAgICAnQjE5LUIzOCcsXG4gICAgICAgICAgICAnQjMyIFNJREUnLFxuICAgICAgICAgICAgJ0JTMS1CUzUnLFxuICAgICAgICAgICAgJ0MxLUMxOCcsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgfSlcbiAgaXQoJ29sZCBmb3JtYXQnLCBhc3luYyBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBwYXJzZUZyY3NUcmlwU3VtbWFyeUZpbGUoXG4gICAgICByZXF1aXJlLnJlc29sdmUoJy4vU1RBVF9zdW1fb2xkLnR4dCcpXG4gICAgKVxuICAgIGV4cGVjdChwYXJzZWQpLnRvLmRlZXAuZXF1YWwoe1xuICAgICAgZXJyb3JzOiBbXSxcbiAgICAgIHRyaXBTdW1tYXJpZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRyaXBOdW1iZXI6IDEsXG4gICAgICAgICAgdHJpcEluZGV4OiAwLFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKDgxLCAxLCAxNSksXG4gICAgICAgICAgdG90YWxMZW5ndGg6IFVuaXRpemUuZmVldCgyNTguNiksXG4gICAgICAgICAgbnVtU2hvdHM6IDE3LFxuICAgICAgICAgIG5hbWU6XG4gICAgICAgICAgICAnRU5UUkFOQ0UgRFJPUFMsIEpPRVxcJ1MgXCJJIExPVkUgTVkgV0lGRSBUUkFWRVJTRVwiLCBUUklDS1kgVFJBVkVSU0UnLFxuICAgICAgICAgIGV4Y2x1ZGVkTGVuZ3RoOiBVbml0aXplLmZlZXQoMCksXG4gICAgICAgICAgbnVtRXhjbHVkZWRTaG90czogMCxcbiAgICAgICAgICB0ZWFtOiBbJ1BldGVyIFF1aWNrJywgJ0tlaXRoIE9ydGl6J10sXG4gICAgICAgICAgc2hvdHM6IFtcbiAgICAgICAgICAgICdBMScsXG4gICAgICAgICAgICAnQUQxLUFEMycsXG4gICAgICAgICAgICAnQUUxJyxcbiAgICAgICAgICAgICdBRTEgU0lERScsXG4gICAgICAgICAgICAnQUU5IFNJREUnLFxuICAgICAgICAgICAgJ0FFMTAtQUU5JyxcbiAgICAgICAgICAgICdBRTEzIFNJREUnLFxuICAgICAgICAgICAgJ0FFMTUgU0lERScsXG4gICAgICAgICAgICAnQUUyMC1BRTExJyxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHtcbiAgICAgICAgICB0cmlwTnVtYmVyOiAzLFxuICAgICAgICAgIHRyaXBJbmRleDogMixcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSg4MSwgMiwgNiksXG4gICAgICAgICAgdG90YWxMZW5ndGg6IFVuaXRpemUuZmVldCgyMzcxLjIpLFxuICAgICAgICAgIG51bVNob3RzOiA2MSxcbiAgICAgICAgICBuYW1lOiBcIkRPVUcnUyBERU1JU0UgKDUwIEZUIERST1ApLCBDSFJJUyBDUk9TUywgQ1JBV0wgQUJPVkUgRFJPUFwiLFxuICAgICAgICAgIGV4Y2x1ZGVkTGVuZ3RoOiBVbml0aXplLmZlZXQoMCksXG4gICAgICAgICAgbnVtRXhjbHVkZWRTaG90czogMCxcbiAgICAgICAgICB0ZWFtOiBbJ1BldGVyIFF1aWNrJywgJ0NocmlzIEdlcmFjZScsICdQaGlsIE9kZW4nLCAnQ2hpcCBIb3BwZXInXSxcbiAgICAgICAgICBzaG90czogW1xuICAgICAgICAgICAgJ0ExMyBTSURFJyxcbiAgICAgICAgICAgICdCMS1CNScsXG4gICAgICAgICAgICAnQjIgU0lERScsXG4gICAgICAgICAgICAnQjMgU0lERScsXG4gICAgICAgICAgICAnQjYtQjE4JyxcbiAgICAgICAgICAgICdCMTcgU0lERScsXG4gICAgICAgICAgICAnQjE5LUIzOCcsXG4gICAgICAgICAgICAnQjMyIFNJREUnLFxuICAgICAgICAgICAgJ0JTMS1CUzUnLFxuICAgICAgICAgICAgJ0MxLUMxOCcsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgfSlcbn0pXG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsU0FBQSxH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
@@ -1,135 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = parseFrcsPlotFile;
7
- var _unitized = require("@speleotica/unitized");
8
- var _parseSegment = require("parse-segment");
9
- /**
10
- * Parses data from a calculated survey file. These look like so:
11
- <pre> 123.182259
12
- AE20 1 1 0 0 0 153 -257 -51 85 0 20 1
13
- AE19 1 2 653 402 -548 1046 -587 -174 97 0 200 1
14
- AE18 2 3 669 449 -3002 995 94 -597 -56 250 0 1
15
- AE17 3 4 539 1217 -2770 497 47 -298 -28 0 0 1
16
- AE16 4 5 544 1230 -3441 411 -284 -246 170 60 10 1
17
- AE15 5 6 1679 1663 -3833 0 0 -282 283 20 10 1
18
- AE14 6 7 2026 2617 -3730 446 225 -446 -225 0 30 1
19
- AE13 7 8 391 3152 -5788 -111 691 0 0 200 50 1
20
- AE12 8 9 -1019 2175 -4630 -369 336 221 -201 40 40 1
21
- AE11 9 10 -1516 1289 -3919 -348 195 610 -342 50 10 1</pre>
22
- */
23
- async function parseFrcsPlotFile(file, lines) {
24
- let totalLength = _unitized.Unitize.feet(NaN);
25
- const shots = [];
26
- const errors = [];
27
- let lineNumber = 0;
28
- const error = (message, line, startColumn, endColumn) => {
29
- errors.push(new _parseSegment.SegmentParseError(message, new _parseSegment.Segment({
30
- value: line,
31
- source: file,
32
- startLine: lineNumber - 1,
33
- startCol: 0
34
- }).substring(startColumn, endColumn)));
35
- };
36
- function parseUint(line, startColumn, endColumn, fieldName) {
37
- const str = line.substring(startColumn, endColumn);
38
- if (!/\S/.test(str)) {
39
- error(`Missing ${fieldName}`, line, startColumn, endColumn);
40
- return null;
41
- }
42
- if (!/^\s*\d+\s*$/.test(str)) {
43
- error(`Invalid ${fieldName}`, line, startColumn, endColumn);
44
- return null;
45
- }
46
- return parseInt(str);
47
- }
48
- function parseOptionalUint(line, startColumn, endColumn, fieldName) {
49
- const str = line.substring(startColumn, endColumn);
50
- if (!/\S/.test(str)) {
51
- return null;
52
- }
53
- if (!/^\s*\d+\s*$/.test(str)) {
54
- error(`Invalid ${fieldName}`, line, startColumn, endColumn);
55
- return null;
56
- }
57
- return parseInt(str);
58
- }
59
- function parseLength(line, startColumn, endColumn, fieldName, divisor) {
60
- const str = line.substring(startColumn, endColumn);
61
- if (!/^\s*-?\d+\s*$/.test(str)) {
62
- error(`Invalid ${fieldName}`, line, startColumn, endColumn);
63
- return null;
64
- }
65
- const value = parseFloat(str);
66
- if (isNaN(value)) {
67
- error(`Missing ${fieldName}`, line, startColumn, endColumn);
68
- return null;
69
- }
70
- return _unitized.Unitize.feet(value / divisor);
71
- }
72
- for await (const line of lines) {
73
- lineNumber++;
74
- if (lineNumber === 1) {
75
- totalLength = _unitized.Unitize.feet(parseFloat(line));
76
- continue;
77
- }
78
- if (!/\S/.test(line)) continue;
79
- const toName = line.substring(0, 6).trim();
80
- if (!toName) {
81
- error('Invalid to station name', line, 0, 6);
82
- continue;
83
- }
84
- if (/[^ S]/.test(line[6])) {
85
- error('Invalid flag', line, 6, 7);
86
- continue;
87
- }
88
- const isSurface = line[6] === 'S';
89
- const fromNumber = parseUint(line, 7, 12, 'from station number');
90
- if (fromNumber == null) continue;
91
- const toNumber = parseUint(line, 12, 17, 'to station number');
92
- if (toNumber == null) continue;
93
- const easting = parseLength(line, 17, 25, 'easting', 100);
94
- if (!easting) continue;
95
- const northing = parseLength(line, 25, 33, 'northing', 100);
96
- if (!northing) continue;
97
- const elevation = parseLength(line, 33, 40, 'elevation', 100);
98
- if (!elevation) continue;
99
- const leftEasting = parseLength(line, 40, 46, 'left wall easting', 100);
100
- if (!leftEasting) continue;
101
- const leftNorthing = parseLength(line, 46, 52, 'left wall northing', 100);
102
- if (!leftNorthing) continue;
103
- const rightEasting = parseLength(line, 52, 58, 'right wall easting', 100);
104
- if (!rightEasting) continue;
105
- const rightNorthing = parseLength(line, 58, 64, 'right wall northing', 100);
106
- if (!rightNorthing) continue;
107
- const up = parseLength(line, 64, 68, 'up', 10);
108
- if (!up) continue;
109
- const down = parseLength(line, 68, 72, 'down', 10);
110
- if (!down) continue;
111
- const tripNumber = parseOptionalUint(line, 72, 78, 'trip number');
112
- shots.push({
113
- toName,
114
- isSurface,
115
- fromNumber,
116
- toNumber,
117
- easting,
118
- northing,
119
- elevation,
120
- leftEasting,
121
- leftNorthing,
122
- rightEasting,
123
- rightNorthing,
124
- up,
125
- down,
126
- tripNumber
127
- });
128
- }
129
- return {
130
- totalLength,
131
- shots,
132
- errors
133
- };
134
- }
135
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pdGl6ZWQiLCJyZXF1aXJlIiwiX3BhcnNlU2VnbWVudCIsInBhcnNlRnJjc1Bsb3RGaWxlIiwiZmlsZSIsImxpbmVzIiwidG90YWxMZW5ndGgiLCJVbml0aXplIiwiZmVldCIsIk5hTiIsInNob3RzIiwiZXJyb3JzIiwibGluZU51bWJlciIsImVycm9yIiwibWVzc2FnZSIsImxpbmUiLCJzdGFydENvbHVtbiIsImVuZENvbHVtbiIsInB1c2giLCJTZWdtZW50UGFyc2VFcnJvciIsIlNlZ21lbnQiLCJ2YWx1ZSIsInNvdXJjZSIsInN0YXJ0TGluZSIsInN0YXJ0Q29sIiwic3Vic3RyaW5nIiwicGFyc2VVaW50IiwiZmllbGROYW1lIiwic3RyIiwidGVzdCIsInBhcnNlSW50IiwicGFyc2VPcHRpb25hbFVpbnQiLCJwYXJzZUxlbmd0aCIsImRpdmlzb3IiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJ0b05hbWUiLCJ0cmltIiwiaXNTdXJmYWNlIiwiZnJvbU51bWJlciIsInRvTnVtYmVyIiwiZWFzdGluZyIsIm5vcnRoaW5nIiwiZWxldmF0aW9uIiwibGVmdEVhc3RpbmciLCJsZWZ0Tm9ydGhpbmciLCJyaWdodEVhc3RpbmciLCJyaWdodE5vcnRoaW5nIiwidXAiLCJkb3duIiwidHJpcE51bWJlciJdLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJzZUZyY3NQbG90RmlsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGcmNzUGxvdFNob3QgfSBmcm9tICcuL0ZyY3NQbG90U2hvdCdcbmltcG9ydCB7IEZyY3NQbG90RmlsZSB9IGZyb20gJy4vRnJjc1Bsb3RGaWxlJ1xuaW1wb3J0IHsgTGVuZ3RoLCBVbml0aXplZE51bWJlciwgVW5pdGl6ZSB9IGZyb20gJ0BzcGVsZW90aWNhL3VuaXRpemVkJ1xuaW1wb3J0IHsgU2VnbWVudCwgU2VnbWVudFBhcnNlRXJyb3IgfSBmcm9tICdwYXJzZS1zZWdtZW50J1xuXG4vKipcbiAqIFBhcnNlcyBkYXRhIGZyb20gYSBjYWxjdWxhdGVkIHN1cnZleSBmaWxlLiAgVGhlc2UgbG9vayBsaWtlIHNvOlxuPHByZT4gIDEyMy4xODIyNTlcbiAgQUUyMCAgICAgMSAgICAxICAgICAgIDAgICAgICAgMCAgICAgIDAgICAxNTMgIC0yNTcgICAtNTEgICAgODUgICAwICAyMCAgICAgMVxuICBBRTE5ICAgICAxICAgIDIgICAgIDY1MyAgICAgNDAyICAgLTU0OCAgMTA0NiAgLTU4NyAgLTE3NCAgICA5NyAgIDAgMjAwICAgICAxXG4gIEFFMTggICAgIDIgICAgMyAgICAgNjY5ICAgICA0NDkgIC0zMDAyICAgOTk1ICAgIDk0ICAtNTk3ICAgLTU2IDI1MCAgIDAgICAgIDFcbiAgQUUxNyAgICAgMyAgICA0ICAgICA1MzkgICAgMTIxNyAgLTI3NzAgICA0OTcgICAgNDcgIC0yOTggICAtMjggICAwICAgMCAgICAgMVxuICBBRTE2ICAgICA0ICAgIDUgICAgIDU0NCAgICAxMjMwICAtMzQ0MSAgIDQxMSAgLTI4NCAgLTI0NiAgIDE3MCAgNjAgIDEwICAgICAxXG4gIEFFMTUgICAgIDUgICAgNiAgICAxNjc5ICAgIDE2NjMgIC0zODMzICAgICAwICAgICAwICAtMjgyICAgMjgzICAyMCAgMTAgICAgIDFcbiAgQUUxNCAgICAgNiAgICA3ICAgIDIwMjYgICAgMjYxNyAgLTM3MzAgICA0NDYgICAyMjUgIC00NDYgIC0yMjUgICAwICAzMCAgICAgMVxuICBBRTEzICAgICA3ICAgIDggICAgIDM5MSAgICAzMTUyICAtNTc4OCAgLTExMSAgIDY5MSAgICAgMCAgICAgMCAyMDAgIDUwICAgICAxXG4gIEFFMTIgICAgIDggICAgOSAgIC0xMDE5ICAgIDIxNzUgIC00NjMwICAtMzY5ICAgMzM2ICAgMjIxICAtMjAxICA0MCAgNDAgICAgIDFcbiAgQUUxMSAgICAgOSAgIDEwICAgLTE1MTYgICAgMTI4OSAgLTM5MTkgIC0zNDggICAxOTUgICA2MTAgIC0zNDIgIDUwICAxMCAgICAgMTwvcHJlPlxuICovXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBwYXJzZUZyY3NQbG90RmlsZShcbiAgZmlsZTogc3RyaW5nLFxuICBsaW5lczogQXN5bmNJdGVyYWJsZTxzdHJpbmc+XG4pOiBQcm9taXNlPEZyY3NQbG90RmlsZT4ge1xuICBsZXQgdG90YWxMZW5ndGg6IFVuaXRpemVkTnVtYmVyPExlbmd0aD4gPSBVbml0aXplLmZlZXQoTmFOKVxuICBjb25zdCBzaG90czogQXJyYXk8RnJjc1Bsb3RTaG90PiA9IFtdXG4gIGNvbnN0IGVycm9yczogQXJyYXk8U2VnbWVudFBhcnNlRXJyb3I+ID0gW11cblxuICBsZXQgbGluZU51bWJlciA9IDBcblxuICBjb25zdCBlcnJvciA9IChcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgbGluZTogc3RyaW5nLFxuICAgIHN0YXJ0Q29sdW1uOiBudW1iZXIsXG4gICAgZW5kQ29sdW1uOiBudW1iZXJcbiAgKTogdm9pZCA9PiB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBuZXcgU2VnbWVudFBhcnNlRXJyb3IoXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIG5ldyBTZWdtZW50KHtcbiAgICAgICAgICB2YWx1ZTogbGluZSxcbiAgICAgICAgICBzb3VyY2U6IGZpbGUsXG4gICAgICAgICAgc3RhcnRMaW5lOiBsaW5lTnVtYmVyIC0gMSxcbiAgICAgICAgICBzdGFydENvbDogMCxcbiAgICAgICAgfSkuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VVaW50KFxuICAgIGxpbmU6IHN0cmluZyxcbiAgICBzdGFydENvbHVtbjogbnVtYmVyLFxuICAgIGVuZENvbHVtbjogbnVtYmVyLFxuICAgIGZpZWxkTmFtZTogc3RyaW5nXG4gICk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IHN0ciA9IGxpbmUuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pXG4gICAgaWYgKCEvXFxTLy50ZXN0KHN0cikpIHtcbiAgICAgIGVycm9yKGBNaXNzaW5nICR7ZmllbGROYW1lfWAsIGxpbmUsIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBpZiAoIS9eXFxzKlxcZCtcXHMqJC8udGVzdChzdHIpKSB7XG4gICAgICBlcnJvcihgSW52YWxpZCAke2ZpZWxkTmFtZX1gLCBsaW5lLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KHN0cilcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlT3B0aW9uYWxVaW50KFxuICAgIGxpbmU6IHN0cmluZyxcbiAgICBzdGFydENvbHVtbjogbnVtYmVyLFxuICAgIGVuZENvbHVtbjogbnVtYmVyLFxuICAgIGZpZWxkTmFtZTogc3RyaW5nXG4gICk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IHN0ciA9IGxpbmUuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pXG4gICAgaWYgKCEvXFxTLy50ZXN0KHN0cikpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGlmICghL15cXHMqXFxkK1xccyokLy50ZXN0KHN0cikpIHtcbiAgICAgIGVycm9yKGBJbnZhbGlkICR7ZmllbGROYW1lfWAsIGxpbmUsIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyKVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMZW5ndGgoXG4gICAgbGluZTogc3RyaW5nLFxuICAgIHN0YXJ0Q29sdW1uOiBudW1iZXIsXG4gICAgZW5kQ29sdW1uOiBudW1iZXIsXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgZGl2aXNvcjogbnVtYmVyXG4gICk6IFVuaXRpemVkTnVtYmVyPExlbmd0aD4gfCBudWxsIHtcbiAgICBjb25zdCBzdHIgPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbiwgZW5kQ29sdW1uKVxuICAgIGlmICghL15cXHMqLT9cXGQrXFxzKiQvLnRlc3Qoc3RyKSkge1xuICAgICAgZXJyb3IoYEludmFsaWQgJHtmaWVsZE5hbWV9YCwgbGluZSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbilcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChzdHIpXG4gICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgZXJyb3IoYE1pc3NpbmcgJHtmaWVsZE5hbWV9YCwgbGluZSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbilcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiBVbml0aXplLmZlZXQodmFsdWUgLyBkaXZpc29yKVxuICB9XG5cbiAgZm9yIGF3YWl0IChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgbGluZU51bWJlcisrXG4gICAgaWYgKGxpbmVOdW1iZXIgPT09IDEpIHtcbiAgICAgIHRvdGFsTGVuZ3RoID0gVW5pdGl6ZS5mZWV0KHBhcnNlRmxvYXQobGluZSkpXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoIS9cXFMvLnRlc3QobGluZSkpIGNvbnRpbnVlXG4gICAgY29uc3QgdG9OYW1lID0gbGluZS5zdWJzdHJpbmcoMCwgNikudHJpbSgpXG4gICAgaWYgKCF0b05hbWUpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIHRvIHN0YXRpb24gbmFtZScsIGxpbmUsIDAsIDYpXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoL1teIFNdLy50ZXN0KGxpbmVbNl0pKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBmbGFnJywgbGluZSwgNiwgNylcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGlzU3VyZmFjZSA9IGxpbmVbNl0gPT09ICdTJ1xuICAgIGNvbnN0IGZyb21OdW1iZXIgPSBwYXJzZVVpbnQobGluZSwgNywgMTIsICdmcm9tIHN0YXRpb24gbnVtYmVyJylcbiAgICBpZiAoZnJvbU51bWJlciA9PSBudWxsKSBjb250aW51ZVxuICAgIGNvbnN0IHRvTnVtYmVyID0gcGFyc2VVaW50KGxpbmUsIDEyLCAxNywgJ3RvIHN0YXRpb24gbnVtYmVyJylcbiAgICBpZiAodG9OdW1iZXIgPT0gbnVsbCkgY29udGludWVcbiAgICBjb25zdCBlYXN0aW5nID0gcGFyc2VMZW5ndGgobGluZSwgMTcsIDI1LCAnZWFzdGluZycsIDEwMClcbiAgICBpZiAoIWVhc3RpbmcpIGNvbnRpbnVlXG4gICAgY29uc3Qgbm9ydGhpbmcgPSBwYXJzZUxlbmd0aChsaW5lLCAyNSwgMzMsICdub3J0aGluZycsIDEwMClcbiAgICBpZiAoIW5vcnRoaW5nKSBjb250aW51ZVxuICAgIGNvbnN0IGVsZXZhdGlvbiA9IHBhcnNlTGVuZ3RoKGxpbmUsIDMzLCA0MCwgJ2VsZXZhdGlvbicsIDEwMClcbiAgICBpZiAoIWVsZXZhdGlvbikgY29udGludWVcbiAgICBjb25zdCBsZWZ0RWFzdGluZyA9IHBhcnNlTGVuZ3RoKGxpbmUsIDQwLCA0NiwgJ2xlZnQgd2FsbCBlYXN0aW5nJywgMTAwKVxuICAgIGlmICghbGVmdEVhc3RpbmcpIGNvbnRpbnVlXG4gICAgY29uc3QgbGVmdE5vcnRoaW5nID0gcGFyc2VMZW5ndGgobGluZSwgNDYsIDUyLCAnbGVmdCB3YWxsIG5vcnRoaW5nJywgMTAwKVxuICAgIGlmICghbGVmdE5vcnRoaW5nKSBjb250aW51ZVxuICAgIGNvbnN0IHJpZ2h0RWFzdGluZyA9IHBhcnNlTGVuZ3RoKGxpbmUsIDUyLCA1OCwgJ3JpZ2h0IHdhbGwgZWFzdGluZycsIDEwMClcbiAgICBpZiAoIXJpZ2h0RWFzdGluZykgY29udGludWVcbiAgICBjb25zdCByaWdodE5vcnRoaW5nID0gcGFyc2VMZW5ndGgobGluZSwgNTgsIDY0LCAncmlnaHQgd2FsbCBub3J0aGluZycsIDEwMClcbiAgICBpZiAoIXJpZ2h0Tm9ydGhpbmcpIGNvbnRpbnVlXG4gICAgY29uc3QgdXAgPSBwYXJzZUxlbmd0aChsaW5lLCA2NCwgNjgsICd1cCcsIDEwKVxuICAgIGlmICghdXApIGNvbnRpbnVlXG4gICAgY29uc3QgZG93biA9IHBhcnNlTGVuZ3RoKGxpbmUsIDY4LCA3MiwgJ2Rvd24nLCAxMClcbiAgICBpZiAoIWRvd24pIGNvbnRpbnVlXG4gICAgY29uc3QgdHJpcE51bWJlciA9IHBhcnNlT3B0aW9uYWxVaW50KGxpbmUsIDcyLCA3OCwgJ3RyaXAgbnVtYmVyJylcblxuICAgIHNob3RzLnB1c2goe1xuICAgICAgdG9OYW1lLFxuICAgICAgaXNTdXJmYWNlLFxuICAgICAgZnJvbU51bWJlcixcbiAgICAgIHRvTnVtYmVyLFxuICAgICAgZWFzdGluZyxcbiAgICAgIG5vcnRoaW5nLFxuICAgICAgZWxldmF0aW9uLFxuICAgICAgbGVmdEVhc3RpbmcsXG4gICAgICBsZWZ0Tm9ydGhpbmcsXG4gICAgICByaWdodEVhc3RpbmcsXG4gICAgICByaWdodE5vcnRoaW5nLFxuICAgICAgdXAsXG4gICAgICBkb3duLFxuICAgICAgdHJpcE51bWJlcixcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3RhbExlbmd0aCxcbiAgICBzaG90cyxcbiAgICBlcnJvcnMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsSUFBQUEsU0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsYUFBQSxHQUFBRCxPQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLGVBQWVFLGlCQUFpQkEsQ0FDN0NDLElBQVksRUFDWkMsS0FBNEIsRUFDTDtFQUN2QixJQUFJQyxXQUFtQyxHQUFHQyxpQkFBTyxDQUFDQyxJQUFJLENBQUNDLEdBQUcsQ0FBQztFQUMzRCxNQUFNQyxLQUEwQixHQUFHLEVBQUU7RUFDckMsTUFBTUMsTUFBZ0MsR0FBRyxFQUFFO0VBRTNDLElBQUlDLFVBQVUsR0FBRyxDQUFDO0VBRWxCLE1BQU1DLEtBQUssR0FBR0EsQ0FDWkMsT0FBZSxFQUNmQyxJQUFZLEVBQ1pDLFdBQW1CLEVBQ25CQyxTQUFpQixLQUNSO0lBQ1ROLE1BQU0sQ0FBQ08sSUFBSSxDQUNULElBQUlDLCtCQUFpQixDQUNuQkwsT0FBTyxFQUNQLElBQUlNLHFCQUFPLENBQUM7TUFDVkMsS0FBSyxFQUFFTixJQUFJO01BQ1hPLE1BQU0sRUFBRWxCLElBQUk7TUFDWm1CLFNBQVMsRUFBRVgsVUFBVSxHQUFHLENBQUM7TUFDekJZLFFBQVEsRUFBRTtJQUNaLENBQUMsQ0FBQyxDQUFDQyxTQUFTLENBQUNULFdBQVcsRUFBRUMsU0FBUyxDQUNyQyxDQUNGLENBQUM7RUFDSCxDQUFDO0VBRUQsU0FBU1MsU0FBU0EsQ0FDaEJYLElBQVksRUFDWkMsV0FBbUIsRUFDbkJDLFNBQWlCLEVBQ2pCVSxTQUFpQixFQUNGO0lBQ2YsTUFBTUMsR0FBRyxHQUFHYixJQUFJLENBQUNVLFNBQVMsQ0FBQ1QsV0FBVyxFQUFFQyxTQUFTLENBQUM7SUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQ1ksSUFBSSxDQUFDRCxHQUFHLENBQUMsRUFBRTtNQUNuQmYsS0FBSyxDQUFFLFdBQVVjLFNBQVUsRUFBQyxFQUFFWixJQUFJLEVBQUVDLFdBQVcsRUFBRUMsU0FBUyxDQUFDO01BQzNELE9BQU8sSUFBSTtJQUNiO0lBQ0EsSUFBSSxDQUFDLGFBQWEsQ0FBQ1ksSUFBSSxDQUFDRCxHQUFHLENBQUMsRUFBRTtNQUM1QmYsS0FBSyxDQUFFLFdBQVVjLFNBQVUsRUFBQyxFQUFFWixJQUFJLEVBQUVDLFdBQVcsRUFBRUMsU0FBUyxDQUFDO01BQzNELE9BQU8sSUFBSTtJQUNiO0lBQ0EsT0FBT2EsUUFBUSxDQUFDRixHQUFHLENBQUM7RUFDdEI7RUFFQSxTQUFTRyxpQkFBaUJBLENBQ3hCaEIsSUFBWSxFQUNaQyxXQUFtQixFQUNuQkMsU0FBaUIsRUFDakJVLFNBQWlCLEVBQ0Y7SUFDZixNQUFNQyxHQUFHLEdBQUdiLElBQUksQ0FBQ1UsU0FBUyxDQUFDVCxXQUFXLEVBQUVDLFNBQVMsQ0FBQztJQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDWSxJQUFJLENBQUNELEdBQUcsQ0FBQyxFQUFFO01BQ25CLE9BQU8sSUFBSTtJQUNiO0lBQ0EsSUFBSSxDQUFDLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDRCxHQUFHLENBQUMsRUFBRTtNQUM1QmYsS0FBSyxDQUFFLFdBQVVjLFNBQVUsRUFBQyxFQUFFWixJQUFJLEVBQUVDLFdBQVcsRUFBRUMsU0FBUyxDQUFDO01BQzNELE9BQU8sSUFBSTtJQUNiO0lBQ0EsT0FBT2EsUUFBUSxDQUFDRixHQUFHLENBQUM7RUFDdEI7RUFFQSxTQUFTSSxXQUFXQSxDQUNsQmpCLElBQVksRUFDWkMsV0FBbUIsRUFDbkJDLFNBQWlCLEVBQ2pCVSxTQUFpQixFQUNqQk0sT0FBZSxFQUNnQjtJQUMvQixNQUFNTCxHQUFHLEdBQUdiLElBQUksQ0FBQ1UsU0FBUyxDQUFDVCxXQUFXLEVBQUVDLFNBQVMsQ0FBQztJQUNsRCxJQUFJLENBQUMsZUFBZSxDQUFDWSxJQUFJLENBQUNELEdBQUcsQ0FBQyxFQUFFO01BQzlCZixLQUFLLENBQUUsV0FBVWMsU0FBVSxFQUFDLEVBQUVaLElBQUksRUFBRUMsV0FBVyxFQUFFQyxTQUFTLENBQUM7TUFDM0QsT0FBTyxJQUFJO0lBQ2I7SUFDQSxNQUFNSSxLQUFLLEdBQUdhLFVBQVUsQ0FBQ04sR0FBRyxDQUFDO0lBQzdCLElBQUlPLEtBQUssQ0FBQ2QsS0FBSyxDQUFDLEVBQUU7TUFDaEJSLEtBQUssQ0FBRSxXQUFVYyxTQUFVLEVBQUMsRUFBRVosSUFBSSxFQUFFQyxXQUFXLEVBQUVDLFNBQVMsQ0FBQztNQUMzRCxPQUFPLElBQUk7SUFDYjtJQUNBLE9BQU9WLGlCQUFPLENBQUNDLElBQUksQ0FBQ2EsS0FBSyxHQUFHWSxPQUFPLENBQUM7RUFDdEM7RUFFQSxXQUFXLE1BQU1sQixJQUFJLElBQUlWLEtBQUssRUFBRTtJQUM5Qk8sVUFBVSxFQUFFO0lBQ1osSUFBSUEsVUFBVSxLQUFLLENBQUMsRUFBRTtNQUNwQk4sV0FBVyxHQUFHQyxpQkFBTyxDQUFDQyxJQUFJLENBQUMwQixVQUFVLENBQUNuQixJQUFJLENBQUMsQ0FBQztNQUM1QztJQUNGO0lBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQ2MsSUFBSSxDQUFDZCxJQUFJLENBQUMsRUFBRTtJQUN0QixNQUFNcUIsTUFBTSxHQUFHckIsSUFBSSxDQUFDVSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDWSxJQUFJLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUNELE1BQU0sRUFBRTtNQUNYdkIsS0FBSyxDQUFDLHlCQUF5QixFQUFFRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUM1QztJQUNGO0lBQ0EsSUFBSSxPQUFPLENBQUNjLElBQUksQ0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7TUFDekJGLEtBQUssQ0FBQyxjQUFjLEVBQUVFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ2pDO0lBQ0Y7SUFDQSxNQUFNdUIsU0FBUyxHQUFHdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7SUFDakMsTUFBTXdCLFVBQVUsR0FBR2IsU0FBUyxDQUFDWCxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQztJQUNoRSxJQUFJd0IsVUFBVSxJQUFJLElBQUksRUFBRTtJQUN4QixNQUFNQyxRQUFRLEdBQUdkLFNBQVMsQ0FBQ1gsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsbUJBQW1CLENBQUM7SUFDN0QsSUFBSXlCLFFBQVEsSUFBSSxJQUFJLEVBQUU7SUFDdEIsTUFBTUMsT0FBTyxHQUFHVCxXQUFXLENBQUNqQixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDO0lBQ3pELElBQUksQ0FBQzBCLE9BQU8sRUFBRTtJQUNkLE1BQU1DLFFBQVEsR0FBR1YsV0FBVyxDQUFDakIsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQztJQUMzRCxJQUFJLENBQUMyQixRQUFRLEVBQUU7SUFDZixNQUFNQyxTQUFTLEdBQUdYLFdBQVcsQ0FBQ2pCLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUM7SUFDN0QsSUFBSSxDQUFDNEIsU0FBUyxFQUFFO0lBQ2hCLE1BQU1DLFdBQVcsR0FBR1osV0FBVyxDQUFDakIsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxDQUFDO0lBQ3ZFLElBQUksQ0FBQzZCLFdBQVcsRUFBRTtJQUNsQixNQUFNQyxZQUFZLEdBQUdiLFdBQVcsQ0FBQ2pCLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsQ0FBQztJQUN6RSxJQUFJLENBQUM4QixZQUFZLEVBQUU7SUFDbkIsTUFBTUMsWUFBWSxHQUFHZCxXQUFXLENBQUNqQixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLENBQUM7SUFDekUsSUFBSSxDQUFDK0IsWUFBWSxFQUFFO0lBQ25CLE1BQU1DLGFBQWEsR0FBR2YsV0FBVyxDQUFDakIsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxDQUFDO0lBQzNFLElBQUksQ0FBQ2dDLGFBQWEsRUFBRTtJQUNwQixNQUFNQyxFQUFFLEdBQUdoQixXQUFXLENBQUNqQixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQzlDLElBQUksQ0FBQ2lDLEVBQUUsRUFBRTtJQUNULE1BQU1DLElBQUksR0FBR2pCLFdBQVcsQ0FBQ2pCLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDbEQsSUFBSSxDQUFDa0MsSUFBSSxFQUFFO0lBQ1gsTUFBTUMsVUFBVSxHQUFHbkIsaUJBQWlCLENBQUNoQixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLENBQUM7SUFFakVMLEtBQUssQ0FBQ1EsSUFBSSxDQUFDO01BQ1RrQixNQUFNO01BQ05FLFNBQVM7TUFDVEMsVUFBVTtNQUNWQyxRQUFRO01BQ1JDLE9BQU87TUFDUEMsUUFBUTtNQUNSQyxTQUFTO01BQ1RDLFdBQVc7TUFDWEMsWUFBWTtNQUNaQyxZQUFZO01BQ1pDLGFBQWE7TUFDYkMsRUFBRTtNQUNGQyxJQUFJO01BQ0pDO0lBQ0YsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxPQUFPO0lBQ0w1QyxXQUFXO0lBQ1hJLEtBQUs7SUFDTEM7RUFDRixDQUFDO0FBQ0gifQ==