@nlabs/rip-hunter 2.6.1 → 2.6.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlabs/rip-hunter",
3
- "version": "2.6.1",
3
+ "version": "2.6.2",
4
4
  "description": "JS utilities for AJAX and GraphQL",
5
5
  "license": "MIT",
6
6
  "main": "./lib/index.js",
package/tsconfig.json CHANGED
@@ -18,7 +18,6 @@
18
18
  "moduleResolution": "node",
19
19
  "noImplicitReturns": true,
20
20
  "noImplicitThis": true,
21
- "noStrictGenericChecks": true,
22
21
  "noUnusedLocals": true,
23
22
  "outDir": "./lib",
24
23
  "removeComments": true,
package/lib/index.test.js DELETED
@@ -1,145 +0,0 @@
1
- var import_fetch_mock = require("@nlabs/fetch-mock");
2
- var import__ = require(".");
3
- describe("rip-hunter", () => {
4
- const fetchMock = new import_fetch_mock.FetchMock();
5
- const url = "http://www.test.com/graphql";
6
- describe("#toGql", () => {
7
- it("should convert a string to GQL", () => {
8
- const str = "test";
9
- const gql = (0, import__.toGql)(str);
10
- return expect('"test"').toEqual(gql);
11
- });
12
- it("should convert a number to GQL", () => {
13
- const num = 123;
14
- const gql = (0, import__.toGql)(num);
15
- return expect(123).toEqual(gql);
16
- });
17
- it("should convert a JSON object to GQL", () => {
18
- const obj = { prop: "test" };
19
- const gql = (0, import__.toGql)(obj);
20
- return expect('{prop: "test"}').toEqual(gql);
21
- });
22
- it("should convert an array to GQL", () => {
23
- const array = [{ prop: "test" }];
24
- const gql = (0, import__.toGql)(array);
25
- return expect('[{prop: "test"}]').toEqual(gql);
26
- });
27
- });
28
- describe("#graphqlQuery", () => {
29
- const query = "query { app { ping } }";
30
- const data = { hello: "world" };
31
- const errors = [{ message: "test_error", name: "Test Error" }];
32
- it("should get a successful response from a query", (done) => {
33
- fetchMock.postOnce(url, {
34
- body: { data },
35
- headers: new Headers({ "Content-Type": "application/json" }),
36
- sendAsJson: true,
37
- status: 200
38
- });
39
- (0, import__.graphqlQuery)(url, { query }).then((results) => {
40
- expect(results.hello).toEqual("world");
41
- done();
42
- }).catch(done);
43
- });
44
- it("should send a token", (done) => {
45
- const token = "test_token";
46
- fetchMock.postOnce(url, {
47
- body: { data },
48
- headers: new Headers({ "Content-Type": "application/json" }),
49
- sendAsJson: true,
50
- status: 200
51
- }, { overwriteRoutes: true });
52
- (0, import__.graphqlQuery)(url, { query }, { token }).then(() => {
53
- const opts = fetchMock.lastOptions();
54
- expect(opts.headers.get("Authorization")).toEqual(`Bearer ${token}`);
55
- done();
56
- }).catch(done);
57
- });
58
- it("should get an error from a query", (done) => {
59
- fetchMock.postOnce(url, {
60
- body: { errors },
61
- headers: new Headers({ "Content-Type": "application/json" }),
62
- sendAsJson: true,
63
- status: 200
64
- }, { overwriteRoutes: true });
65
- (0, import__.graphqlQuery)(url, { query }).then(() => {
66
- expect(false).toEqual(true);
67
- done();
68
- }).catch((error) => {
69
- expect(error.errors[0]).toEqual("test_error");
70
- done();
71
- });
72
- });
73
- });
74
- describe("#graphqlQuery mutation", () => {
75
- const query = "mutation { app { ping } }";
76
- const data = { hello: "world" };
77
- const errors = [{ message: "test_error", name: "Test Error" }];
78
- it("should get a successful response from a query", (done) => {
79
- fetchMock.postOnce(url, {
80
- body: { data },
81
- headers: new Headers({ "Content-Type": "application/json" }),
82
- sendAsJson: true,
83
- status: 200
84
- }, { overwriteRoutes: true });
85
- (0, import__.graphqlQuery)(url, { query }).then((results) => {
86
- expect(results.hello).toEqual("world");
87
- done();
88
- }).catch(done);
89
- });
90
- it("should send a token", (done) => {
91
- const token = "test_token";
92
- fetchMock.postOnce(url, {
93
- body: { data },
94
- headers: new Headers({ "Content-Type": "application/json" }),
95
- sendAsJson: true,
96
- status: 200
97
- }, { overwriteRoutes: true });
98
- (0, import__.graphqlQuery)(url, { query }, { token }).then(() => {
99
- const opts = fetchMock.lastOptions();
100
- expect(opts.headers.get("Authorization")).toEqual(`Bearer ${token}`);
101
- done();
102
- }).catch(done);
103
- });
104
- it("should get an error from a query", (done) => {
105
- fetchMock.postOnce(url, {
106
- body: { errors },
107
- headers: new Headers({ "Content-Type": "application/json" }),
108
- sendAsJson: true,
109
- status: 200
110
- }, { overwriteRoutes: true });
111
- (0, import__.graphqlQuery)(url, { query }).then(() => {
112
- expect(false).toEqual(true);
113
- done();
114
- }).catch((error) => {
115
- expect(error.errors[0]).toEqual("test_error");
116
- done();
117
- });
118
- });
119
- });
120
- describe(".ajax", () => {
121
- const gql = "{ app { ping } }";
122
- it("should be able to post", (done) => {
123
- fetchMock.postOnce(url, {
124
- body: { test: "demo" },
125
- headers: new Headers({ "Content-Type": "application/json" }),
126
- sendAsJson: true,
127
- status: 200
128
- }, { overwriteRoutes: true });
129
- (0, import__.ajax)(url, "post", gql).then((response) => {
130
- expect(response.test).toEqual("demo");
131
- done();
132
- }).catch((error) => {
133
- expect(error).toEqual(false);
134
- done();
135
- });
136
- });
137
- });
138
- describe(".removeSpaces", () => {
139
- it("should remove extra spacing except within quotes", () => {
140
- const str = 'test{ method: {id: "hello world"}';
141
- expect((0, import__.removeSpaces)(str)).toEqual('test{method:{id:"hello world"}');
142
- });
143
- });
144
- });
145
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRlc3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7RmV0Y2hNb2NrfSBmcm9tICdAbmxhYnMvZmV0Y2gtbW9jayc7XG5cbmltcG9ydCB7YWpheCwgZ3JhcGhxbFF1ZXJ5LCByZW1vdmVTcGFjZXMsIHRvR3FsfSBmcm9tICcuJztcbmltcG9ydCB7QXBpRXJyb3J9IGZyb20gJy4vZXJyb3JzL0FwaUVycm9yJztcblxuZGVzY3JpYmUoJ3JpcC1odW50ZXInLCAoKSA9PiB7XG4gIGNvbnN0IGZldGNoTW9jayA9IG5ldyBGZXRjaE1vY2soKTtcbiAgY29uc3QgdXJsID0gJ2h0dHA6Ly93d3cudGVzdC5jb20vZ3JhcGhxbCc7XG5cbiAgZGVzY3JpYmUoJyN0b0dxbCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgdG8gR1FMJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSAndGVzdCc7XG4gICAgICBjb25zdCBncWw6IHN0cmluZyA9IHRvR3FsKHN0cik7XG4gICAgICByZXR1cm4gZXhwZWN0KCdcInRlc3RcIicpLnRvRXF1YWwoZ3FsKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBhIG51bWJlciB0byBHUUwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBudW06IG51bWJlciA9IDEyMztcbiAgICAgIGNvbnN0IGdxbDogc3RyaW5nID0gdG9HcWwobnVtKTtcbiAgICAgIHJldHVybiBleHBlY3QoMTIzKS50b0VxdWFsKGdxbCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBKU09OIG9iamVjdCB0byBHUUwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmo6IG9iamVjdCA9IHtwcm9wOiAndGVzdCd9O1xuICAgICAgY29uc3QgZ3FsOiBzdHJpbmcgPSB0b0dxbChvYmopO1xuICAgICAgcmV0dXJuIGV4cGVjdCgne3Byb3A6IFwidGVzdFwifScpLnRvRXF1YWwoZ3FsKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBhbiBhcnJheSB0byBHUUwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheTogb2JqZWN0W10gPSBbe3Byb3A6ICd0ZXN0J31dO1xuICAgICAgY29uc3QgZ3FsOiBzdHJpbmcgPSB0b0dxbChhcnJheSk7XG4gICAgICByZXR1cm4gZXhwZWN0KCdbe3Byb3A6IFwidGVzdFwifV0nKS50b0VxdWFsKGdxbCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCcjZ3JhcGhxbFF1ZXJ5JywgKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSAncXVlcnkgeyBhcHAgeyBwaW5nIH0gfSc7XG4gICAgY29uc3QgZGF0YTogb2JqZWN0ID0ge2hlbGxvOiAnd29ybGQnfTtcbiAgICBjb25zdCBlcnJvcnM6IEVycm9yW10gPSBbe21lc3NhZ2U6ICd0ZXN0X2Vycm9yJywgbmFtZTogJ1Rlc3QgRXJyb3InfV07XG5cbiAgICBpdCgnc2hvdWxkIGdldCBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBhIHF1ZXJ5JywgKGRvbmUpID0+IHtcbiAgICAgIGZldGNoTW9jay5wb3N0T25jZSh1cmwsIHtcbiAgICAgICAgYm9keToge2RhdGF9LFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ30pLFxuICAgICAgICBzZW5kQXNKc29uOiB0cnVlLFxuICAgICAgICBzdGF0dXM6IDIwMFxuICAgICAgfSk7XG5cbiAgICAgIGdyYXBocWxRdWVyeSh1cmwsIHtxdWVyeX0pXG4gICAgICAgIC50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdHMuaGVsbG8pLnRvRXF1YWwoJ3dvcmxkJyk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZG9uZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNlbmQgYSB0b2tlbicsIChkb25lKSA9PiB7XG4gICAgICBjb25zdCB0b2tlbjogc3RyaW5nID0gJ3Rlc3RfdG9rZW4nO1xuICAgICAgZmV0Y2hNb2NrLnBvc3RPbmNlKHVybCwge1xuICAgICAgICBib2R5OiB7ZGF0YX0sXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nfSksXG4gICAgICAgIHNlbmRBc0pzb246IHRydWUsXG4gICAgICAgIHN0YXR1czogMjAwXG4gICAgICB9LCB7b3ZlcndyaXRlUm91dGVzOiB0cnVlfSk7XG5cbiAgICAgIGdyYXBocWxRdWVyeSh1cmwsIHtxdWVyeX0sIHt0b2tlbn0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRzID0gZmV0Y2hNb2NrLmxhc3RPcHRpb25zKCk7XG4gICAgICAgICAgZXhwZWN0KG9wdHMuaGVhZGVycy5nZXQoJ0F1dGhvcml6YXRpb24nKSkudG9FcXVhbChgQmVhcmVyICR7dG9rZW59YCk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZG9uZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCBhbiBlcnJvciBmcm9tIGEgcXVlcnknLCAoZG9uZSkgPT4ge1xuICAgICAgZmV0Y2hNb2NrLnBvc3RPbmNlKHVybCwge1xuICAgICAgICBib2R5OiB7ZXJyb3JzfSxcbiAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9KSxcbiAgICAgICAgc2VuZEFzSnNvbjogdHJ1ZSxcbiAgICAgICAgc3RhdHVzOiAyMDBcbiAgICAgIH0sIHtvdmVyd3JpdGVSb3V0ZXM6IHRydWV9KTtcblxuICAgICAgZ3JhcGhxbFF1ZXJ5KHVybCwge3F1ZXJ5fSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGV4cGVjdChmYWxzZSkudG9FcXVhbCh0cnVlKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEFwaUVycm9yKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KGVycm9yLmVycm9yc1swXSkudG9FcXVhbCgndGVzdF9lcnJvcicpO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCcjZ3JhcGhxbFF1ZXJ5IG11dGF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSAnbXV0YXRpb24geyBhcHAgeyBwaW5nIH0gfSc7XG4gICAgY29uc3QgZGF0YTogb2JqZWN0ID0ge2hlbGxvOiAnd29ybGQnfTtcbiAgICBjb25zdCBlcnJvcnM6IEVycm9yW10gPSBbe21lc3NhZ2U6ICd0ZXN0X2Vycm9yJywgbmFtZTogJ1Rlc3QgRXJyb3InfV07XG5cbiAgICBpdCgnc2hvdWxkIGdldCBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBhIHF1ZXJ5JywgKGRvbmUpID0+IHtcbiAgICAgIGZldGNoTW9jay5wb3N0T25jZSh1cmwsIHtcbiAgICAgICAgYm9keToge2RhdGF9LFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ30pLFxuICAgICAgICBzZW5kQXNKc29uOiB0cnVlLFxuICAgICAgICBzdGF0dXM6IDIwMFxuICAgICAgfSwge292ZXJ3cml0ZVJvdXRlczogdHJ1ZX0pO1xuXG4gICAgICBncmFwaHFsUXVlcnkodXJsLCB7cXVlcnl9KVxuICAgICAgICAudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgICAgIGV4cGVjdChyZXN1bHRzLmhlbGxvKS50b0VxdWFsKCd3b3JsZCcpO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGRvbmUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZW5kIGEgdG9rZW4nLCAoZG9uZSkgPT4ge1xuICAgICAgY29uc3QgdG9rZW46IHN0cmluZyA9ICd0ZXN0X3Rva2VuJztcbiAgICAgIGZldGNoTW9jay5wb3N0T25jZSh1cmwsIHtcbiAgICAgICAgYm9keToge2RhdGF9LFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ30pLFxuICAgICAgICBzZW5kQXNKc29uOiB0cnVlLFxuICAgICAgICBzdGF0dXM6IDIwMFxuICAgICAgfSwge292ZXJ3cml0ZVJvdXRlczogdHJ1ZX0pO1xuXG4gICAgICBncmFwaHFsUXVlcnkodXJsLCB7cXVlcnl9LCB7dG9rZW59KVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3B0cyA9IGZldGNoTW9jay5sYXN0T3B0aW9ucygpO1xuICAgICAgICAgIGV4cGVjdChvcHRzLmhlYWRlcnMuZ2V0KCdBdXRob3JpemF0aW9uJykpLnRvRXF1YWwoYEJlYXJlciAke3Rva2VufWApO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGRvbmUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgYW4gZXJyb3IgZnJvbSBhIHF1ZXJ5JywgKGRvbmUpID0+IHtcbiAgICAgIGZldGNoTW9jay5wb3N0T25jZSh1cmwsIHtcbiAgICAgICAgYm9keToge2Vycm9yc30sXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nfSksXG4gICAgICAgIHNlbmRBc0pzb246IHRydWUsXG4gICAgICAgIHN0YXR1czogMjAwXG4gICAgICB9LCB7b3ZlcndyaXRlUm91dGVzOiB0cnVlfSk7XG5cbiAgICAgIGdyYXBocWxRdWVyeSh1cmwsIHtxdWVyeX0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBleHBlY3QoZmFsc2UpLnRvRXF1YWwodHJ1ZSk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBBcGlFcnJvcikgPT4ge1xuICAgICAgICAgIGV4cGVjdChlcnJvci5lcnJvcnNbMF0pLnRvRXF1YWwoJ3Rlc3RfZXJyb3InKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnLmFqYXgnLCAoKSA9PiB7XG4gICAgY29uc3QgZ3FsOiBzdHJpbmcgPSAneyBhcHAgeyBwaW5nIH0gfSc7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gcG9zdCcsIChkb25lKSA9PiB7XG4gICAgICBmZXRjaE1vY2sucG9zdE9uY2UodXJsLCB7XG4gICAgICAgIGJvZHk6IHt0ZXN0OiAnZGVtbyd9LFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ30pLFxuICAgICAgICBzZW5kQXNKc29uOiB0cnVlLFxuICAgICAgICBzdGF0dXM6IDIwMFxuICAgICAgfSwge292ZXJ3cml0ZVJvdXRlczogdHJ1ZX0pO1xuXG4gICAgICBhamF4KHVybCwgJ3Bvc3QnLCBncWwpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGV4cGVjdChyZXNwb25zZS50ZXN0KS50b0VxdWFsKCdkZW1vJyk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBBcGlFcnJvcikgPT4ge1xuICAgICAgICAgIGV4cGVjdChlcnJvcikudG9FcXVhbChmYWxzZSk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJy5yZW1vdmVTcGFjZXMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgZXh0cmEgc3BhY2luZyBleGNlcHQgd2l0aGluIHF1b3RlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gJ3Rlc3R7IG1ldGhvZDoge2lkOiBcImhlbGxvIHdvcmxkXCJ9JztcbiAgICAgIGV4cGVjdChyZW1vdmVTcGFjZXMoc3RyKSkudG9FcXVhbCgndGVzdHttZXRob2Q6e2lkOlwiaGVsbG8gd29ybGRcIn0nKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBLHdCQUF3QjtBQUV4QixlQUFzRDtBQUd0RCxTQUFTLGNBQWMsTUFBTTtBQUMzQixRQUFNLFlBQVksSUFBSSw0QkFBVTtBQUNoQyxRQUFNLE1BQU07QUFFWixXQUFTLFVBQVUsTUFBTTtBQUN2QixPQUFHLGtDQUFrQyxNQUFNO0FBQ3pDLFlBQU0sTUFBYztBQUNwQixZQUFNLFVBQWMsZ0JBQU0sR0FBRztBQUM3QixhQUFPLE9BQU8sUUFBUSxFQUFFLFFBQVEsR0FBRztBQUFBLElBQ3JDLENBQUM7QUFFRCxPQUFHLGtDQUFrQyxNQUFNO0FBQ3pDLFlBQU0sTUFBYztBQUNwQixZQUFNLFVBQWMsZ0JBQU0sR0FBRztBQUM3QixhQUFPLE9BQU8sR0FBRyxFQUFFLFFBQVEsR0FBRztBQUFBLElBQ2hDLENBQUM7QUFFRCxPQUFHLHVDQUF1QyxNQUFNO0FBQzlDLFlBQU0sTUFBYyxFQUFDLE1BQU0sT0FBTTtBQUNqQyxZQUFNLFVBQWMsZ0JBQU0sR0FBRztBQUM3QixhQUFPLE9BQU8sZ0JBQWdCLEVBQUUsUUFBUSxHQUFHO0FBQUEsSUFDN0MsQ0FBQztBQUVELE9BQUcsa0NBQWtDLE1BQU07QUFDekMsWUFBTSxRQUFrQixDQUFDLEVBQUMsTUFBTSxPQUFNLENBQUM7QUFDdkMsWUFBTSxVQUFjLGdCQUFNLEtBQUs7QUFDL0IsYUFBTyxPQUFPLGtCQUFrQixFQUFFLFFBQVEsR0FBRztBQUFBLElBQy9DLENBQUM7QUFBQSxFQUNILENBQUM7QUFFRCxXQUFTLGlCQUFpQixNQUFNO0FBQzlCLFVBQU0sUUFBZ0I7QUFDdEIsVUFBTSxPQUFlLEVBQUMsT0FBTyxRQUFPO0FBQ3BDLFVBQU0sU0FBa0IsQ0FBQyxFQUFDLFNBQVMsY0FBYyxNQUFNLGFBQVksQ0FBQztBQUVwRSxPQUFHLGlEQUFpRCxDQUFDLFNBQVM7QUFDNUQsZ0JBQVUsU0FBUyxLQUFLO0FBQUEsUUFDdEIsTUFBTSxFQUFDLEtBQUk7QUFBQSxRQUNYLFNBQVMsSUFBSSxRQUFRLEVBQUMsZ0JBQWdCLG1CQUFrQixDQUFDO0FBQUEsUUFDekQsWUFBWTtBQUFBLFFBQ1osUUFBUTtBQUFBLE1BQ1YsQ0FBQztBQUVELGlDQUFhLEtBQUssRUFBQyxNQUFLLENBQUMsRUFDdEIsS0FBSyxDQUFDLFlBQVk7QUFDakIsZUFBTyxRQUFRLEtBQUssRUFBRSxRQUFRLE9BQU87QUFDckMsYUFBSztBQUFBLE1BQ1AsQ0FBQyxFQUNBLE1BQU0sSUFBSTtBQUFBLElBQ2YsQ0FBQztBQUVELE9BQUcsdUJBQXVCLENBQUMsU0FBUztBQUNsQyxZQUFNLFFBQWdCO0FBQ3RCLGdCQUFVLFNBQVMsS0FBSztBQUFBLFFBQ3RCLE1BQU0sRUFBQyxLQUFJO0FBQUEsUUFDWCxTQUFTLElBQUksUUFBUSxFQUFDLGdCQUFnQixtQkFBa0IsQ0FBQztBQUFBLFFBQ3pELFlBQVk7QUFBQSxRQUNaLFFBQVE7QUFBQSxNQUNWLEdBQUcsRUFBQyxpQkFBaUIsS0FBSSxDQUFDO0FBRTFCLGlDQUFhLEtBQUssRUFBQyxNQUFLLEdBQUcsRUFBQyxNQUFLLENBQUMsRUFDL0IsS0FBSyxNQUFNO0FBQ1YsY0FBTSxPQUFPLFVBQVUsWUFBWTtBQUNuQyxlQUFPLEtBQUssUUFBUSxJQUFJLGVBQWUsQ0FBQyxFQUFFLFFBQVEsVUFBVSxPQUFPO0FBQ25FLGFBQUs7QUFBQSxNQUNQLENBQUMsRUFDQSxNQUFNLElBQUk7QUFBQSxJQUNmLENBQUM7QUFFRCxPQUFHLG9DQUFvQyxDQUFDLFNBQVM7QUFDL0MsZ0JBQVUsU0FBUyxLQUFLO0FBQUEsUUFDdEIsTUFBTSxFQUFDLE9BQU07QUFBQSxRQUNiLFNBQVMsSUFBSSxRQUFRLEVBQUMsZ0JBQWdCLG1CQUFrQixDQUFDO0FBQUEsUUFDekQsWUFBWTtBQUFBLFFBQ1osUUFBUTtBQUFBLE1BQ1YsR0FBRyxFQUFDLGlCQUFpQixLQUFJLENBQUM7QUFFMUIsaUNBQWEsS0FBSyxFQUFDLE1BQUssQ0FBQyxFQUN0QixLQUFLLE1BQU07QUFDVixlQUFPLEtBQUssRUFBRSxRQUFRLElBQUk7QUFDMUIsYUFBSztBQUFBLE1BQ1AsQ0FBQyxFQUNBLE1BQU0sQ0FBQyxVQUFvQjtBQUMxQixlQUFPLE1BQU0sT0FBTyxDQUFDLENBQUMsRUFBRSxRQUFRLFlBQVk7QUFDNUMsYUFBSztBQUFBLE1BQ1AsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUVELFdBQVMsMEJBQTBCLE1BQU07QUFDdkMsVUFBTSxRQUFnQjtBQUN0QixVQUFNLE9BQWUsRUFBQyxPQUFPLFFBQU87QUFDcEMsVUFBTSxTQUFrQixDQUFDLEVBQUMsU0FBUyxjQUFjLE1BQU0sYUFBWSxDQUFDO0FBRXBFLE9BQUcsaURBQWlELENBQUMsU0FBUztBQUM1RCxnQkFBVSxTQUFTLEtBQUs7QUFBQSxRQUN0QixNQUFNLEVBQUMsS0FBSTtBQUFBLFFBQ1gsU0FBUyxJQUFJLFFBQVEsRUFBQyxnQkFBZ0IsbUJBQWtCLENBQUM7QUFBQSxRQUN6RCxZQUFZO0FBQUEsUUFDWixRQUFRO0FBQUEsTUFDVixHQUFHLEVBQUMsaUJBQWlCLEtBQUksQ0FBQztBQUUxQixpQ0FBYSxLQUFLLEVBQUMsTUFBSyxDQUFDLEVBQ3RCLEtBQUssQ0FBQyxZQUFZO0FBQ2pCLGVBQU8sUUFBUSxLQUFLLEVBQUUsUUFBUSxPQUFPO0FBQ3JDLGFBQUs7QUFBQSxNQUNQLENBQUMsRUFDQSxNQUFNLElBQUk7QUFBQSxJQUNmLENBQUM7QUFFRCxPQUFHLHVCQUF1QixDQUFDLFNBQVM7QUFDbEMsWUFBTSxRQUFnQjtBQUN0QixnQkFBVSxTQUFTLEtBQUs7QUFBQSxRQUN0QixNQUFNLEVBQUMsS0FBSTtBQUFBLFFBQ1gsU0FBUyxJQUFJLFFBQVEsRUFBQyxnQkFBZ0IsbUJBQWtCLENBQUM7QUFBQSxRQUN6RCxZQUFZO0FBQUEsUUFDWixRQUFRO0FBQUEsTUFDVixHQUFHLEVBQUMsaUJBQWlCLEtBQUksQ0FBQztBQUUxQixpQ0FBYSxLQUFLLEVBQUMsTUFBSyxHQUFHLEVBQUMsTUFBSyxDQUFDLEVBQy9CLEtBQUssTUFBTTtBQUNWLGNBQU0sT0FBTyxVQUFVLFlBQVk7QUFDbkMsZUFBTyxLQUFLLFFBQVEsSUFBSSxlQUFlLENBQUMsRUFBRSxRQUFRLFVBQVUsT0FBTztBQUNuRSxhQUFLO0FBQUEsTUFDUCxDQUFDLEVBQ0EsTUFBTSxJQUFJO0FBQUEsSUFDZixDQUFDO0FBRUQsT0FBRyxvQ0FBb0MsQ0FBQyxTQUFTO0FBQy9DLGdCQUFVLFNBQVMsS0FBSztBQUFBLFFBQ3RCLE1BQU0sRUFBQyxPQUFNO0FBQUEsUUFDYixTQUFTLElBQUksUUFBUSxFQUFDLGdCQUFnQixtQkFBa0IsQ0FBQztBQUFBLFFBQ3pELFlBQVk7QUFBQSxRQUNaLFFBQVE7QUFBQSxNQUNWLEdBQUcsRUFBQyxpQkFBaUIsS0FBSSxDQUFDO0FBRTFCLGlDQUFhLEtBQUssRUFBQyxNQUFLLENBQUMsRUFDdEIsS0FBSyxNQUFNO0FBQ1YsZUFBTyxLQUFLLEVBQUUsUUFBUSxJQUFJO0FBQzFCLGFBQUs7QUFBQSxNQUNQLENBQUMsRUFDQSxNQUFNLENBQUMsVUFBb0I7QUFDMUIsZUFBTyxNQUFNLE9BQU8sQ0FBQyxDQUFDLEVBQUUsUUFBUSxZQUFZO0FBQzVDLGFBQUs7QUFBQSxNQUNQLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUNILENBQUM7QUFFRCxXQUFTLFNBQVMsTUFBTTtBQUN0QixVQUFNLE1BQWM7QUFFcEIsT0FBRywwQkFBMEIsQ0FBQyxTQUFTO0FBQ3JDLGdCQUFVLFNBQVMsS0FBSztBQUFBLFFBQ3RCLE1BQU0sRUFBQyxNQUFNLE9BQU07QUFBQSxRQUNuQixTQUFTLElBQUksUUFBUSxFQUFDLGdCQUFnQixtQkFBa0IsQ0FBQztBQUFBLFFBQ3pELFlBQVk7QUFBQSxRQUNaLFFBQVE7QUFBQSxNQUNWLEdBQUcsRUFBQyxpQkFBaUIsS0FBSSxDQUFDO0FBRTFCLHlCQUFLLEtBQUssUUFBUSxHQUFHLEVBQ2xCLEtBQUssQ0FBQyxhQUFhO0FBQ2xCLGVBQU8sU0FBUyxJQUFJLEVBQUUsUUFBUSxNQUFNO0FBQ3BDLGFBQUs7QUFBQSxNQUNQLENBQUMsRUFDQSxNQUFNLENBQUMsVUFBb0I7QUFDMUIsZUFBTyxLQUFLLEVBQUUsUUFBUSxLQUFLO0FBQzNCLGFBQUs7QUFBQSxNQUNQLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUNILENBQUM7QUFFRCxXQUFTLGlCQUFpQixNQUFNO0FBQzlCLE9BQUcsb0RBQW9ELE1BQU07QUFDM0QsWUFBTSxNQUFjO0FBQ3BCLGlCQUFPLHVCQUFhLEdBQUcsQ0FBQyxFQUFFLFFBQVEsZ0NBQWdDO0FBQUEsSUFDcEUsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNILENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==