@prisma/studio-core-licensed 0.7.0 → 0.8.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 (60) hide show
  1. package/dist/chunk-32BUC7NR.js +10 -0
  2. package/dist/chunk-3KCOUVOV.js +10 -0
  3. package/dist/chunk-A6CVKSUD.js +10 -0
  4. package/dist/chunk-M7E5UEO3.js +10 -0
  5. package/dist/chunk-O6ZAHVDF.js +10 -0
  6. package/dist/chunk-SXTJF4PD.js +10 -0
  7. package/dist/chunk-ZUEQ555M.js +10 -0
  8. package/dist/data/accelerate/index.d.cts +1 -1
  9. package/dist/data/accelerate/index.d.ts +1 -1
  10. package/dist/data/bff/index.cjs +2 -2
  11. package/dist/data/bff/index.d.cts +15 -3
  12. package/dist/data/bff/index.d.ts +15 -3
  13. package/dist/data/bff/index.js +2 -2
  14. package/dist/data/index.d.cts +1 -1
  15. package/dist/data/index.d.ts +1 -1
  16. package/dist/data/index.js +1 -1
  17. package/dist/data/mysql-core/index.cjs +3 -0
  18. package/dist/data/mysql-core/index.d.cts +176 -0
  19. package/dist/data/mysql-core/index.d.ts +176 -0
  20. package/dist/data/mysql-core/index.js +11 -0
  21. package/dist/data/mysql2/index.cjs +2 -0
  22. package/dist/data/mysql2/index.d.cts +7 -0
  23. package/dist/data/mysql2/index.d.ts +7 -0
  24. package/dist/data/mysql2/index.js +10 -0
  25. package/dist/data/node-sqlite/index.cjs +2 -2
  26. package/dist/data/node-sqlite/index.d.cts +2 -3
  27. package/dist/data/node-sqlite/index.d.ts +2 -3
  28. package/dist/data/node-sqlite/index.js +2 -2
  29. package/dist/data/pglite/index.cjs +2 -2
  30. package/dist/data/pglite/index.d.cts +1 -1
  31. package/dist/data/pglite/index.d.ts +1 -1
  32. package/dist/data/pglite/index.js +2 -2
  33. package/dist/data/postgres-core/index.cjs +2 -2
  34. package/dist/data/postgres-core/index.d.cts +37 -37
  35. package/dist/data/postgres-core/index.d.ts +37 -37
  36. package/dist/data/postgres-core/index.js +1 -1
  37. package/dist/data/postgresjs/index.cjs +2 -2
  38. package/dist/data/postgresjs/index.d.cts +3 -14
  39. package/dist/data/postgresjs/index.d.ts +3 -14
  40. package/dist/data/postgresjs/index.js +2 -2
  41. package/dist/data/ppg/index.d.cts +1 -1
  42. package/dist/data/ppg/index.d.ts +1 -1
  43. package/dist/data/sqlite-core/index.cjs +2 -2
  44. package/dist/data/sqlite-core/index.d.cts +25 -25
  45. package/dist/data/sqlite-core/index.d.ts +25 -25
  46. package/dist/data/sqlite-core/index.js +2 -2
  47. package/dist/{index-2horhMcs.d.cts → index-BhPjNuvP.d.cts} +10 -6
  48. package/dist/{index-2horhMcs.d.ts → index-BhPjNuvP.d.ts} +10 -6
  49. package/dist/metafile-cjs.json +1 -1
  50. package/dist/metafile-esm.json +1 -1
  51. package/dist/ui/index.cjs +1 -1
  52. package/dist/ui/index.d.cts +1 -1
  53. package/dist/ui/index.d.ts +1 -1
  54. package/dist/ui/index.js +2 -2
  55. package/package.json +22 -1
  56. package/dist/chunk-AHIV4VYN.js +0 -10
  57. package/dist/chunk-CTJRZ7VA.js +0 -10
  58. package/dist/chunk-NDYVVFWW.js +0 -10
  59. package/dist/chunk-OTK4ZF2W.js +0 -10
  60. package/dist/chunk-WHLVNWIR.js +0 -10
@@ -0,0 +1,176 @@
1
+ import { d as AdapterRequirements, S as SequenceExecutor, A as Adapter, T as Table, F as FilterOperator, Q as Query, f as AdapterDeleteDetails, B as BuilderRequirements, h as AdapterUpdateDetails, e as AdapterQueryDetails } from '../../index-BhPjNuvP.cjs';
2
+ import { OkPacketParams } from 'mysql2';
3
+ import * as kysely from 'kysely';
4
+
5
+ type MySQLAdapterRequirements = Omit<AdapterRequirements, "executor"> & {
6
+ executor: SequenceExecutor;
7
+ };
8
+ declare function createMySQLAdapter(requirements: MySQLAdapterRequirements): Adapter;
9
+ /**
10
+ * For testing purposes.
11
+ */
12
+ declare function mockIntrospect(): {
13
+ schemas: { [K in "studio"]: {
14
+ name: K;
15
+ tables: { [T in "animals" | "users"]: Table; };
16
+ }; };
17
+ timezone: "UTC";
18
+ filterOperators: FilterOperator[];
19
+ query: Query;
20
+ };
21
+
22
+ declare function getDeleteQuery(details: AdapterDeleteDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
23
+ affectedRows?: number | undefined;
24
+ insertId?: number | undefined;
25
+ serverStatus?: number | undefined;
26
+ warningCount?: number | undefined;
27
+ message?: string | undefined;
28
+ }>;
29
+ declare function getInsertQuery(details: {
30
+ rows: Record<string, unknown>[];
31
+ table: Table;
32
+ }, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<OkPacketParams>;
33
+ declare function getInsertRefetchQuery(details: {
34
+ criteria: Record<string, unknown>[];
35
+ table: Table;
36
+ }, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
37
+ [x: string]: unknown;
38
+ __ps_inserted_at__: string | number;
39
+ }>;
40
+ declare function getUpdateRefetchQuery(details: AdapterUpdateDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
41
+ [x: string]: unknown;
42
+ __ps_updated_at__: string | number;
43
+ }>;
44
+ declare function getSelectQuery(details: AdapterQueryDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
45
+ [x: string]: unknown;
46
+ __ps_count__: `${bigint}`;
47
+ }>;
48
+ /**
49
+ * For testing purposes.
50
+ */
51
+ declare function mockSelectQuery(): [];
52
+ declare function getUpdateQuery(details: AdapterUpdateDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
53
+ affectedRows?: number | undefined;
54
+ insertId?: number | undefined;
55
+ serverStatus?: number | undefined;
56
+ warningCount?: number | undefined;
57
+ message?: string | undefined;
58
+ }>;
59
+
60
+ declare function getTablesQuery(requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
61
+ name: string;
62
+ schema: string;
63
+ type: "BASE TABLE" | "VIEW";
64
+ columns: {
65
+ name: string;
66
+ datatype: string;
67
+ position: number;
68
+ fk_table: string | null;
69
+ fk_column: string | null;
70
+ autoincrement: kysely.SqlBool;
71
+ computed: kysely.SqlBool;
72
+ pk: kysely.SqlBool;
73
+ nullable: kysely.SqlBool;
74
+ }[];
75
+ }>;
76
+ declare function mockTablesQuery(): [{
77
+ readonly columns: [{
78
+ readonly autoincrement: 1;
79
+ readonly computed: 0;
80
+ readonly datatype: "int";
81
+ readonly fk_column: null;
82
+ readonly fk_table: null;
83
+ readonly name: "id";
84
+ readonly nullable: 0;
85
+ readonly pk: 1;
86
+ readonly position: 1;
87
+ }, {
88
+ readonly autoincrement: 0;
89
+ readonly computed: 0;
90
+ readonly datatype: "binary(16)";
91
+ readonly fk_column: null;
92
+ readonly fk_table: null;
93
+ readonly name: "uuid";
94
+ readonly nullable: 1;
95
+ readonly pk: 0;
96
+ readonly position: 2;
97
+ }, {
98
+ readonly autoincrement: 0;
99
+ readonly computed: 0;
100
+ readonly datatype: "varchar(255)";
101
+ readonly fk_column: null;
102
+ readonly fk_table: null;
103
+ readonly name: "name";
104
+ readonly nullable: 1;
105
+ readonly pk: 0;
106
+ readonly position: 3;
107
+ }, {
108
+ readonly autoincrement: 0;
109
+ readonly computed: 1;
110
+ readonly datatype: "text";
111
+ readonly fk_column: null;
112
+ readonly fk_table: null;
113
+ readonly name: "id_name";
114
+ readonly nullable: 1;
115
+ readonly pk: 0;
116
+ readonly position: 4;
117
+ }];
118
+ readonly name: "animals";
119
+ readonly schema: "studio";
120
+ readonly type: "BASE TABLE";
121
+ }, {
122
+ readonly columns: [{
123
+ readonly autoincrement: 1;
124
+ readonly computed: 0;
125
+ readonly datatype: "int";
126
+ readonly fk_column: null;
127
+ readonly fk_table: null;
128
+ readonly name: "id";
129
+ readonly nullable: 0;
130
+ readonly pk: 1;
131
+ readonly position: 1;
132
+ }, {
133
+ readonly autoincrement: 0;
134
+ readonly computed: 0;
135
+ readonly datatype: "timestamp";
136
+ readonly fk_column: null;
137
+ readonly fk_table: null;
138
+ readonly name: "created_at";
139
+ readonly nullable: 1;
140
+ readonly pk: 0;
141
+ readonly position: 2;
142
+ }, {
143
+ readonly autoincrement: 0;
144
+ readonly computed: 0;
145
+ readonly datatype: "enum('admin','maintainer','member')";
146
+ readonly fk_column: null;
147
+ readonly fk_table: null;
148
+ readonly name: "role";
149
+ readonly nullable: 0;
150
+ readonly pk: 0;
151
+ readonly position: 3;
152
+ }, {
153
+ readonly autoincrement: 0;
154
+ readonly computed: 0;
155
+ readonly datatype: "int";
156
+ readonly fk_column: "id";
157
+ readonly fk_table: "animals";
158
+ readonly name: "animal_id";
159
+ readonly nullable: 1;
160
+ readonly pk: 0;
161
+ readonly position: 4;
162
+ }];
163
+ readonly name: "users";
164
+ readonly schema: "studio";
165
+ readonly type: "BASE TABLE";
166
+ }];
167
+ declare function getTimezoneQuery(requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
168
+ timezone: string;
169
+ }>;
170
+ declare function mockTimezoneQuery(): [{
171
+ readonly timezone: "UTC";
172
+ }];
173
+
174
+ declare function getCancelQuery(threadId: unknown): Query<unknown>;
175
+
176
+ export { type MySQLAdapterRequirements, createMySQLAdapter, getCancelQuery, getDeleteQuery, getInsertQuery, getInsertRefetchQuery, getSelectQuery, getTablesQuery, getTimezoneQuery, getUpdateQuery, getUpdateRefetchQuery, mockIntrospect, mockSelectQuery, mockTablesQuery, mockTimezoneQuery };
@@ -0,0 +1,176 @@
1
+ import { d as AdapterRequirements, S as SequenceExecutor, A as Adapter, T as Table, F as FilterOperator, Q as Query, f as AdapterDeleteDetails, B as BuilderRequirements, h as AdapterUpdateDetails, e as AdapterQueryDetails } from '../../index-BhPjNuvP.js';
2
+ import { OkPacketParams } from 'mysql2';
3
+ import * as kysely from 'kysely';
4
+
5
+ type MySQLAdapterRequirements = Omit<AdapterRequirements, "executor"> & {
6
+ executor: SequenceExecutor;
7
+ };
8
+ declare function createMySQLAdapter(requirements: MySQLAdapterRequirements): Adapter;
9
+ /**
10
+ * For testing purposes.
11
+ */
12
+ declare function mockIntrospect(): {
13
+ schemas: { [K in "studio"]: {
14
+ name: K;
15
+ tables: { [T in "animals" | "users"]: Table; };
16
+ }; };
17
+ timezone: "UTC";
18
+ filterOperators: FilterOperator[];
19
+ query: Query;
20
+ };
21
+
22
+ declare function getDeleteQuery(details: AdapterDeleteDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
23
+ affectedRows?: number | undefined;
24
+ insertId?: number | undefined;
25
+ serverStatus?: number | undefined;
26
+ warningCount?: number | undefined;
27
+ message?: string | undefined;
28
+ }>;
29
+ declare function getInsertQuery(details: {
30
+ rows: Record<string, unknown>[];
31
+ table: Table;
32
+ }, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<OkPacketParams>;
33
+ declare function getInsertRefetchQuery(details: {
34
+ criteria: Record<string, unknown>[];
35
+ table: Table;
36
+ }, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
37
+ [x: string]: unknown;
38
+ __ps_inserted_at__: string | number;
39
+ }>;
40
+ declare function getUpdateRefetchQuery(details: AdapterUpdateDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
41
+ [x: string]: unknown;
42
+ __ps_updated_at__: string | number;
43
+ }>;
44
+ declare function getSelectQuery(details: AdapterQueryDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
45
+ [x: string]: unknown;
46
+ __ps_count__: `${bigint}`;
47
+ }>;
48
+ /**
49
+ * For testing purposes.
50
+ */
51
+ declare function mockSelectQuery(): [];
52
+ declare function getUpdateQuery(details: AdapterUpdateDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
53
+ affectedRows?: number | undefined;
54
+ insertId?: number | undefined;
55
+ serverStatus?: number | undefined;
56
+ warningCount?: number | undefined;
57
+ message?: string | undefined;
58
+ }>;
59
+
60
+ declare function getTablesQuery(requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
61
+ name: string;
62
+ schema: string;
63
+ type: "BASE TABLE" | "VIEW";
64
+ columns: {
65
+ name: string;
66
+ datatype: string;
67
+ position: number;
68
+ fk_table: string | null;
69
+ fk_column: string | null;
70
+ autoincrement: kysely.SqlBool;
71
+ computed: kysely.SqlBool;
72
+ pk: kysely.SqlBool;
73
+ nullable: kysely.SqlBool;
74
+ }[];
75
+ }>;
76
+ declare function mockTablesQuery(): [{
77
+ readonly columns: [{
78
+ readonly autoincrement: 1;
79
+ readonly computed: 0;
80
+ readonly datatype: "int";
81
+ readonly fk_column: null;
82
+ readonly fk_table: null;
83
+ readonly name: "id";
84
+ readonly nullable: 0;
85
+ readonly pk: 1;
86
+ readonly position: 1;
87
+ }, {
88
+ readonly autoincrement: 0;
89
+ readonly computed: 0;
90
+ readonly datatype: "binary(16)";
91
+ readonly fk_column: null;
92
+ readonly fk_table: null;
93
+ readonly name: "uuid";
94
+ readonly nullable: 1;
95
+ readonly pk: 0;
96
+ readonly position: 2;
97
+ }, {
98
+ readonly autoincrement: 0;
99
+ readonly computed: 0;
100
+ readonly datatype: "varchar(255)";
101
+ readonly fk_column: null;
102
+ readonly fk_table: null;
103
+ readonly name: "name";
104
+ readonly nullable: 1;
105
+ readonly pk: 0;
106
+ readonly position: 3;
107
+ }, {
108
+ readonly autoincrement: 0;
109
+ readonly computed: 1;
110
+ readonly datatype: "text";
111
+ readonly fk_column: null;
112
+ readonly fk_table: null;
113
+ readonly name: "id_name";
114
+ readonly nullable: 1;
115
+ readonly pk: 0;
116
+ readonly position: 4;
117
+ }];
118
+ readonly name: "animals";
119
+ readonly schema: "studio";
120
+ readonly type: "BASE TABLE";
121
+ }, {
122
+ readonly columns: [{
123
+ readonly autoincrement: 1;
124
+ readonly computed: 0;
125
+ readonly datatype: "int";
126
+ readonly fk_column: null;
127
+ readonly fk_table: null;
128
+ readonly name: "id";
129
+ readonly nullable: 0;
130
+ readonly pk: 1;
131
+ readonly position: 1;
132
+ }, {
133
+ readonly autoincrement: 0;
134
+ readonly computed: 0;
135
+ readonly datatype: "timestamp";
136
+ readonly fk_column: null;
137
+ readonly fk_table: null;
138
+ readonly name: "created_at";
139
+ readonly nullable: 1;
140
+ readonly pk: 0;
141
+ readonly position: 2;
142
+ }, {
143
+ readonly autoincrement: 0;
144
+ readonly computed: 0;
145
+ readonly datatype: "enum('admin','maintainer','member')";
146
+ readonly fk_column: null;
147
+ readonly fk_table: null;
148
+ readonly name: "role";
149
+ readonly nullable: 0;
150
+ readonly pk: 0;
151
+ readonly position: 3;
152
+ }, {
153
+ readonly autoincrement: 0;
154
+ readonly computed: 0;
155
+ readonly datatype: "int";
156
+ readonly fk_column: "id";
157
+ readonly fk_table: "animals";
158
+ readonly name: "animal_id";
159
+ readonly nullable: 1;
160
+ readonly pk: 0;
161
+ readonly position: 4;
162
+ }];
163
+ readonly name: "users";
164
+ readonly schema: "studio";
165
+ readonly type: "BASE TABLE";
166
+ }];
167
+ declare function getTimezoneQuery(requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
168
+ timezone: string;
169
+ }>;
170
+ declare function mockTimezoneQuery(): [{
171
+ readonly timezone: "UTC";
172
+ }];
173
+
174
+ declare function getCancelQuery(threadId: unknown): Query<unknown>;
175
+
176
+ export { type MySQLAdapterRequirements, createMySQLAdapter, getCancelQuery, getDeleteQuery, getInsertQuery, getInsertRefetchQuery, getSelectQuery, getTablesQuery, getTimezoneQuery, getUpdateQuery, getUpdateRefetchQuery, mockIntrospect, mockSelectQuery, mockTablesQuery, mockTimezoneQuery };
@@ -0,0 +1,11 @@
1
+ import * as ___react___ from 'react';
2
+ import * as ___react_dom___ from 'react-dom';
3
+
4
+ function require(mod) {
5
+ if (mod === 'react') return ___react___;
6
+ if (mod === 'react-dom') return ___react_dom___;
7
+ throw new Error(`Unknown module ${mod}`);
8
+ }
9
+ import{a as $}from"../../chunk-32BUC7NR.js";import{a as ue}from"../../chunk-ZUEQ555M.js";import{a as i}from"../../chunk-O6ZAHVDF.js";import{i as A,n as j,o as P,p as F,r as T,s as Q,t as z,u as C,v as Y}from"../../chunk-A6CVKSUD.js";import{e as f}from"../../chunk-GDQBQ7MK.js";f();f();f();var v={bigint:{group:"numeric"},binary:{group:"string"},bit:{group:"raw"},blob:{group:"string"},char:{group:"string"},"char binary":{group:"string"},date:{group:"datetime"},datetime:{group:"datetime"},dec:{group:"numeric"},decimal:{group:"numeric"},double:{group:"numeric"},"double precision":{group:"numeric"},enum:{group:"enum"},fixed:{group:"numeric"},float:{group:"numeric"},geometry:{group:"raw"},geometrycollection:{group:"raw"},int:{group:"numeric"},integer:{group:"numeric"},json:{group:"json"},linestring:{group:"raw"},long:{group:"string"},"long varchar":{group:"string"},longblob:{group:"string"},longtext:{group:"string"},longvarbinary:{group:"string"},longvarchar:{group:"string"},mediumblob:{group:"string"},mediumint:{group:"numeric"},mediumtext:{group:"string"},multilinestring:{group:"raw"},multipoint:{group:"raw"},multipolygon:{group:"raw"},numeric:{group:"numeric"},point:{group:"raw"},polygon:{group:"raw"},real:{group:"numeric"},set:{group:"raw"},smallint:{group:"numeric"},text:{group:"string"},time:{group:"time"},timestamp:{group:"datetime"},tinyblob:{group:"string"},tinyint:{group:"numeric"},tinytext:{group:"string"},varbinary:{group:"string"},varchar:{group:"string"},"varchar binary":{group:"string"},vector:{group:"raw"},year:{group:"numeric"}};f();f();function b(o){return F({...o,Adapter:P,QueryCompiler:j})}function H(o,t){let{rows:r,table:{columns:s,name:n}}=o,e=b(t);return T(e.deleteFrom(n).$call(Q(r,s)).$castTo())}function M(o,t){let{rows:r,table:{columns:s,name:n}}=o,e=b(t);return T(e.insertInto(n).values(C("insert",r,s)).$castTo())}function I(o,t){let{criteria:r,table:{columns:s,name:n}}=o,e=b(t);return T(e.selectFrom(n).$call(Q(r,s)).select(Object.keys(s)).select(W().as("__ps_inserted_at__")))}function K(o,t){let{changes:r,row:s,table:{columns:n,name:e}}=o,u=b(t);return T(u.selectFrom(e).$call(Q([{...s,...r}],n)).select(Object.keys(n)).select(W().as("__ps_updated_at__")))}function G(o,t){let{filter:r={after:"and",filters:[],kind:"FilterGroup"},pageIndex:s,pageSize:n,sortOrder:e,table:{columns:u,name:m}}=o,d=b(t),c=Y(r.filters,u),_=d.selectFrom(m).where(c).select(y=>y.cast(y.fn.coalesce(y.fn.countAll(),A.lit(0)),"char").as("value"));return T(d.with("count",()=>_).selectFrom([m,"count"]).where(c).select(Object.keys(u)).select(A.ref("count.value").as("__ps_count__")).$call(y=>e.reduce((E,p)=>E.orderBy(p.column,p.direction),y)).limit(n).offset(A.lit(BigInt(s)*BigInt(n))))}function fe(){return[]}function V(o,t){let{changes:r,row:s,table:{columns:n,name:e,schema:u}}=o,m=b(t);return T(m.withSchema(u).updateTable(e).set(C("update",r,n)).$call(Q([s],n)).$castTo())}function W(){return A`cast(unix_timestamp(now(3)) * 1000 as unsigned)`}f();f();function X(o){return A`(select cast(coalesce(json_arrayagg(json_object(${A.join(oe(o.toOperationNode(),"agg"))})), '[]') as json) from ${o} as agg)`}function oe(o,t){try{return $(o,t)}catch{throw new Error("MySQL jsonArrayFrom and jsonObjectFrom functions can only handle explicit selections due to limitations of the json_object function. selectAll() is not allowed in the subquery.")}}function J(o){return T(b(o).selectFrom("information_schema.tables as t").where("t.TABLE_SCHEMA","=",A`database()`).where("t.TABLE_TYPE","in",["BASE TABLE","VIEW"]).select(["t.TABLE_SCHEMA as schema","t.TABLE_NAME as name","t.TABLE_TYPE as type"]).$narrowType().select(t=>X(t.selectFrom("information_schema.columns as c").leftJoin("information_schema.KEY_COLUMN_USAGE as kcu",r=>r.onRef("kcu.TABLE_SCHEMA","=","c.TABLE_SCHEMA").onRef("kcu.TABLE_NAME","=","c.TABLE_NAME").onRef("kcu.COLUMN_NAME","=","c.COLUMN_NAME").on("kcu.POSITION_IN_UNIQUE_CONSTRAINT","is not",null)).whereRef("c.TABLE_SCHEMA","=","t.TABLE_SCHEMA").whereRef("c.TABLE_NAME","=","t.TABLE_NAME").select(["c.COLUMN_NAME as name","c.COLUMN_TYPE as datatype","c.ORDINAL_POSITION as position","kcu.REFERENCED_TABLE_NAME as fk_table","kcu.REFERENCED_COLUMN_NAME as fk_column"]).select(r=>[r("c.EXTRA","=","auto_increment").as("autoincrement"),r("c.EXTRA","in",["on update CURRENT_TIMESTAMP","STORED GENERATED","VIRTUAL GENERATED"]).as("computed"),r("c.COLUMN_KEY","=","PRI").as("pk"),r("c.IS_NULLABLE","=","YES").as("nullable")])).as("columns")).orderBy("t.TABLE_SCHEMA").orderBy("t.TABLE_NAME").orderBy("t.TABLE_TYPE"))}function Z(){return[{columns:[{autoincrement:1,computed:0,datatype:"int",fk_column:null,fk_table:null,name:"id",nullable:0,pk:1,position:1},{autoincrement:0,computed:0,datatype:"binary(16)",fk_column:null,fk_table:null,name:"uuid",nullable:1,pk:0,position:2},{autoincrement:0,computed:0,datatype:"varchar(255)",fk_column:null,fk_table:null,name:"name",nullable:1,pk:0,position:3},{autoincrement:0,computed:1,datatype:"text",fk_column:null,fk_table:null,name:"id_name",nullable:1,pk:0,position:4}],name:"animals",schema:"studio",type:"BASE TABLE"},{columns:[{autoincrement:1,computed:0,datatype:"int",fk_column:null,fk_table:null,name:"id",nullable:0,pk:1,position:1},{autoincrement:0,computed:0,datatype:"timestamp",fk_column:null,fk_table:null,name:"created_at",nullable:1,pk:0,position:2},{autoincrement:0,computed:0,datatype:"enum('admin','maintainer','member')",fk_column:null,fk_table:null,name:"role",nullable:0,pk:0,position:3},{autoincrement:0,computed:0,datatype:"int",fk_column:"id",fk_table:"animals",name:"animal_id",nullable:1,pk:0,position:4}],name:"users",schema:"studio",type:"BASE TABLE"}]}function ee(o){let t=b(o),r=A`@@session.time_zone`;return T(t.selectNoFrom(t.case().when(r,"=","SYSTEM").then(A`@@system_time_zone`).else(r).end().as("timezone")).$narrowType())}function re(){return[{timezone:"UTC"}]}function Ie(o){let{executor:t,...r}=o;return{async delete(s,n){try{let e=H(s,r),[u]=await t.execute(e,n);return u?i({error:u,query:e}):[null,{...s,query:e}]}catch(e){return i({error:e})}},async insert(s,n){try{let{rows:e,table:u}=s,{columns:m}=u,d=Object.values(m).find(a=>a.isAutoincrement),c=e.map(a=>z(a,m)),_=c.some(a=>{let l=Object.values(a);return l.length===0||l.some(g=>g==null)});if(!d&&_)return i({error:new Error("Cannot proceed with the insertion, some rows cannot be refetched after insertion."),query:M(s,r)});if(!_){let a=M(s,r),l=I({criteria:c,table:u},r),g=[a,l],[[S],w]=await t.executeSequence(g,n),N=B(g);if(S)return i({error:S,query:N});let[k,O]=w;return k?i({error:new Error("Failed to refetch inserted rows - please refresh.",{cause:k}),query:N}):[null,{rows:O,query:N}]}let y=await Promise.all(e.map(async a=>{let l=M({rows:[a],table:u},r),[g,S]=await t.execute(l,n);if(g)return i({error:g,query:l});let{name:w}=d,N=a[w]||S[0]?.insertId;if(!N)return i({error:new Error("Could not determine value for autoincrement column to refetch inserted row."),query:l});let k=I({criteria:[{[w]:N}],table:{...u,columns:Object.values(m).reduce((x,U)=>{let{name:D}=U;return x[D]={...U,isInPrimaryKey:D===w},x},{})}},r),[O,ne]=await t.execute(k,n),L=B([l,k]);if(O)return console.error("Error refetching inserted row:",O),i({error:new Error("Failed to refetch inserted row - please refresh.",{cause:O}),query:L});let[q]=ne;return q?[null,{row:q,query:L}]:i({error:new Error("Refetch query returned no results for inserted row."),query:L})})),E=[],p=null,R=[];for(let a=0;a<y.length;a++){let[l,g]=y[a];l?(R.push([a,l]),l.query&&(p=p?B([p,l.query]):l.query)):(E.push(g.row),g.query&&(p=p?B([p,g.query]):g.query))}return R.length>0?i({error:new AggregateError(R.map(([,a])=>a),`Row${R.length>1?"s":""} ${R.map(([a])=>a).join(", ")} could not be inserted or refetched.`),query:p}):[null,{rows:E,query:p}]}catch(e){return i({error:e})}},async introspect(s){try{let n=J(o),e=ee(o),[[u,m],[d,c]]=await Promise.all([t.execute(n,s),t.execute(e,s)]);if(u)return i({error:u,query:n});if(d)return i({error:d,query:e});let _=c[0]?.timezone;return _?[null,te({query:n,tables:m,timezone:_})]:i({error:new Error("Timezone not found"),query:e})}catch(n){return i({error:n})}},async query(s,n){try{let e=G(s,r),[u,m]=await t.execute(e,n);return u?i({error:u,query:e}):[null,{filteredRowCount:m[0]?.__ps_count__||"0",rows:m,query:e}]}catch(e){return i({error:e})}},async update(s,n){try{let e=V(s,r),u=K(s,r),[[m],d]=await t.executeSequence([e,u],n);if(m)return i({error:m,query:e});let[c,_]=d;if(c)return i({error:c,query:e});let[y]=_;return y?[null,{row:y,query:e}]:i({error:new Error("Updated row not found"),query:e})}catch(e){return i({error:e})}}}}function te(o){let{query:t,tables:r,timezone:s}=o;return r.reduce((n,e)=>{let{schemas:u}=n,{columns:m,name:d,schema:c}=e,_=m.sort((y,E)=>y.position-E.position).reduce((y,E)=>{let{datatype:p,name:R}=E,a=p.indexOf("("),l=(a>-1?p.substring(0,a):p).trim().toLowerCase();return{...y,[R]:{datatype:{...v[l]||{group:"raw"},isArray:!1,isNative:!0,name:l,options:l==="enum"?p.slice(6,-2).split("','"):[],schema:c},fkColumn:E.fk_column,fkSchema:c,fkTable:E.fk_table,isAutoincrement:!!E.autoincrement,isComputed:!!E.computed,isInPrimaryKey:!!E.pk,name:R,nullable:!!E.nullable,schema:c,table:d}}},{});return u[c]===void 0&&(u[c]={name:c,tables:{}}),u[c].tables[d]={columns:_,name:d,schema:c},n},{filterOperators:se,query:t,schemas:{},timezone:s})}var se=["=","!=",">",">=","<","<=","is","is not","like","not like"];function qe(){let o=Z(),[{timezone:t}]=re();return te({tables:o,timezone:t,query:{parameters:[],sql:"<mocked>"}})}function B(o){let[t,r]=o;return{parameters:t.parameters.concat(r.parameters),sql:`${t.sql};
10
+ ${r.sql}`}}export{Ie as createMySQLAdapter,ue as getCancelQuery,H as getDeleteQuery,M as getInsertQuery,I as getInsertRefetchQuery,G as getSelectQuery,J as getTablesQuery,ee as getTimezoneQuery,V as getUpdateQuery,K as getUpdateRefetchQuery,qe as mockIntrospect,fe as mockSelectQuery,Z as mockTablesQuery,re as mockTimezoneQuery};
11
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9teXNxbC1jb3JlL2luZGV4LnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9hZGFwdGVyLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL215c3FsLWNvcmUvZG1sLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9idWlsZGVyLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9teXNxbC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG1sXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsaXR5XCI7XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBBZGFwdGVyLFxuICB0eXBlIEFkYXB0ZXJEZWxldGVSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckVycm9yLFxuICB0eXBlIEFkYXB0ZXJJbnNlcnRSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckludHJvc3BlY3RSZXN1bHQsXG4gIHR5cGUgQWRhcHRlclF1ZXJ5UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJSZXF1aXJlbWVudHMsXG4gIHR5cGUgQWRhcHRlclVwZGF0ZVJlc3VsdCxcbiAgdHlwZSBDb2x1bW4sXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2VxdWVuY2VFeGVjdXRvciB9IGZyb20gXCIuLi9leGVjdXRvclwiO1xuaW1wb3J0IHsgaW5mZXJGaWx0ZXJPYmplY3QsIHR5cGUgUXVlcnksIHR5cGUgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IE1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEgfSBmcm9tIFwiLi9kYXRhdHlwZVwiO1xuaW1wb3J0IHtcbiAgZ2V0RGVsZXRlUXVlcnksXG4gIGdldEluc2VydFF1ZXJ5LFxuICBnZXRJbnNlcnRSZWZldGNoUXVlcnksXG4gIGdldFNlbGVjdFF1ZXJ5LFxuICBnZXRVcGRhdGVRdWVyeSxcbiAgZ2V0VXBkYXRlUmVmZXRjaFF1ZXJ5LFxufSBmcm9tIFwiLi9kbWxcIjtcbmltcG9ydCB7IGdldFRhYmxlc1F1ZXJ5LCBnZXRUaW1lem9uZVF1ZXJ5LCBtb2NrVGFibGVzUXVlcnksIG1vY2tUaW1lem9uZVF1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBNeVNRTEFkYXB0ZXJSZXF1aXJlbWVudHMgPSBPbWl0PEFkYXB0ZXJSZXF1aXJlbWVudHMsIFwiZXhlY3V0b3JcIj4gJiB7XG4gIGV4ZWN1dG9yOiBTZXF1ZW5jZUV4ZWN1dG9yO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU15U1FMQWRhcHRlcihyZXF1aXJlbWVudHM6IE15U1FMQWRhcHRlclJlcXVpcmVtZW50cyk6IEFkYXB0ZXIge1xuICBjb25zdCB7IGV4ZWN1dG9yLCAuLi5vdGhlclJlcXVpcmVtZW50cyB9ID0gcmVxdWlyZW1lbnRzO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZGVsZXRlKGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJEZWxldGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldERlbGV0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbZXJyb3JdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyAuLi5kZXRhaWxzLCBxdWVyeSB9XTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGluc2VydChkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW5zZXJ0UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyByb3dzLCB0YWJsZSB9ID0gZGV0YWlscztcbiAgICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSB0YWJsZTtcblxuICAgICAgICBjb25zdCBhdXRvaW5jcmVtZW50Q29sdW1uOiBDb2x1bW4gfCB1bmRlZmluZWQgPSBPYmplY3QudmFsdWVzKGNvbHVtbnMpLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmlzQXV0b2luY3JlbWVudCk7XG5cbiAgICAgICAgY29uc3QgZmlsdGVyT2JqZWN0cyA9IHJvd3MubWFwKChyb3cpID0+IGluZmVyRmlsdGVyT2JqZWN0KHJvdywgY29sdW1ucykpO1xuXG4gICAgICAgIGNvbnN0IGhhc1BhcnRpYWxGaWx0ZXJPYmplY3RzID0gZmlsdGVyT2JqZWN0cy5zb21lKChmaWx0ZXJPYmplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZXMgPSBPYmplY3QudmFsdWVzKGZpbHRlck9iamVjdCk7XG5cbiAgICAgICAgICByZXR1cm4gZmlsdGVyVmFsdWVzLmxlbmd0aCA9PT0gMCB8fCBmaWx0ZXJWYWx1ZXMuc29tZSgodmFsdWUpID0+IHZhbHVlID09IG51bGwpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgY2xhc3NpYyBwYXJ0aWFsIGZpbHRlciBvYmplY3QgY2FzZXMgKGUuZy4gdXVpZCkgaGVyZSBvciBiZWZvcmUgcmVxdWVzdGluZyBmcm9tIGFkYXB0ZXIuXG4gICAgICAgIGlmICghYXV0b2luY3JlbWVudENvbHVtbiAmJiBoYXNQYXJ0aWFsRmlsdGVyT2JqZWN0cykge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3Ioe1xuICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIkNhbm5vdCBwcm9jZWVkIHdpdGggdGhlIGluc2VydGlvbiwgc29tZSByb3dzIGNhbm5vdCBiZSByZWZldGNoZWQgYWZ0ZXIgaW5zZXJ0aW9uLlwiKSxcbiAgICAgICAgICAgIHF1ZXJ5OiBnZXRJbnNlcnRRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhhc1BhcnRpYWxGaWx0ZXJPYmplY3RzKSB7XG4gICAgICAgICAgY29uc3QgaW5zZXJ0UXVlcnkgPSBnZXRJbnNlcnRRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgICAgY29uc3QgcmVmZXRjaFF1ZXJ5ID0gZ2V0SW5zZXJ0UmVmZXRjaFF1ZXJ5KHsgY3JpdGVyaWE6IGZpbHRlck9iamVjdHMsIHRhYmxlIH0sIG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgICBjb25zdCBzZXF1ZW5jZSA9IFtpbnNlcnRRdWVyeSwgcmVmZXRjaFF1ZXJ5XSBhcyBjb25zdDtcblxuICAgICAgICAgIGNvbnN0IFtbaW5zZXJ0RXJyb3JdLCBtYXliZVJlZmV0Y2hSZXN1bHRdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZVNlcXVlbmNlKHNlcXVlbmNlLCBvcHRpb25zKTtcblxuICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gam9pblNlcXVlbmNlKHNlcXVlbmNlKTtcblxuICAgICAgICAgIGlmIChpbnNlcnRFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBpbnNlcnRFcnJvciwgcXVlcnkgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgW3JlZmV0Y2hFcnJvciwgcmVmZXRjaFJlc3VsdHNdID0gbWF5YmVSZWZldGNoUmVzdWx0ITtcblxuICAgICAgICAgIGlmIChyZWZldGNoRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3Ioe1xuICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlZmV0Y2ggaW5zZXJ0ZWQgcm93cyAtIHBsZWFzZSByZWZyZXNoLlwiLCB7IGNhdXNlOiByZWZldGNoRXJyb3IgfSksXG4gICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3M6IHJlZmV0Y2hSZXN1bHRzLCBxdWVyeSB9XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhcyBhdXRvaW5jcmVtZW50IGNvbHVtbiAtIGluc2VydCByb3dzIG9uZSBieSBvbmUgYW5kIHJlZmV0Y2gsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYGluc2VydElkYCBpZiBpbnNlcnRlZCByb3cgaGFzIG5vIHZhbHVlIGZvciB0aGlzIGNvbHVtbi5cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJvd3MubWFwKGFzeW5jIChyb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydFF1ZXJ5ID0gZ2V0SW5zZXJ0UXVlcnkoeyByb3dzOiBbcm93XSwgdGFibGUgfSwgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdF0gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKGluc2VydFF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnk6IGluc2VydFF1ZXJ5IH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7IG5hbWU6IGF1dG9pbmNyZW1lbnRDb2x1bW5OYW1lIH0gPSBhdXRvaW5jcmVtZW50Q29sdW1uITtcblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByb3dbYXV0b2luY3JlbWVudENvbHVtbk5hbWVdIHx8IHJlc3VsdFswXT8uaW5zZXJ0SWQ7XG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7XG4gICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBkZXRlcm1pbmUgdmFsdWUgZm9yIGF1dG9pbmNyZW1lbnQgY29sdW1uIHRvIHJlZmV0Y2ggaW5zZXJ0ZWQgcm93LlwiKSxcbiAgICAgICAgICAgICAgICBxdWVyeTogaW5zZXJ0UXVlcnksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZWZldGNoUXVlcnkgPSBnZXRJbnNlcnRSZWZldGNoUXVlcnkoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjcml0ZXJpYTogW3sgW2F1dG9pbmNyZW1lbnRDb2x1bW5OYW1lXTogdmFsdWUgfV0sXG4gICAgICAgICAgICAgICAgdGFibGU6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnRhYmxlLFxuICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGRpcnR5IGhhY2sgdG8gbWFyayBhdXRvaW5jcmVtZW50IGNvbHVtbiBhcyBUSEUgcHJpbWFyeSBrZXkgZm9yIHJlZmV0Y2hpbmcuXG4gICAgICAgICAgICAgICAgICBjb2x1bW5zOiBPYmplY3QudmFsdWVzKGNvbHVtbnMpLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgKGFjYywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBuYW1lOiBjb2x1bW5OYW1lIH0gPSBjb2x1bW47XG5cbiAgICAgICAgICAgICAgICAgICAgICBhY2NbY29sdW1uTmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0luUHJpbWFyeUtleTogY29sdW1uTmFtZSA9PT0gYXV0b2luY3JlbWVudENvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHt9IGFzIFRhYmxlW1wiY29sdW1uc1wiXSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb3RoZXJSZXF1aXJlbWVudHMsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBbcmVmZXRjaEVycm9yLCByZWZldGNoUmVzdWx0c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHJlZmV0Y2hRdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gam9pblNlcXVlbmNlKFtpbnNlcnRRdWVyeSwgcmVmZXRjaFF1ZXJ5XSk7XG5cbiAgICAgICAgICAgIGlmIChyZWZldGNoRXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHJlZmV0Y2hpbmcgaW5zZXJ0ZWQgcm93OlwiLCByZWZldGNoRXJyb3IpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVmZXRjaCBpbnNlcnRlZCByb3cgLSBwbGVhc2UgcmVmcmVzaC5cIiwgeyBjYXVzZTogcmVmZXRjaEVycm9yIH0pLFxuICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgW3JlZmV0Y2hlZFJvd10gPSByZWZldGNoUmVzdWx0cztcblxuICAgICAgICAgICAgaWYgKCFyZWZldGNoZWRSb3cpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7XG4gICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIlJlZmV0Y2ggcXVlcnkgcmV0dXJuZWQgbm8gcmVzdWx0cyBmb3IgaW5zZXJ0ZWQgcm93LlwiKSxcbiAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBbbnVsbCwgeyByb3c6IHJlZmV0Y2hlZFJvdywgcXVlcnkgfV0gYXMgY29uc3Q7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW5zZXJ0ZWRSb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG4gICAgICAgIGxldCBxdWVyeTogUXVlcnk8dW5rbm93bj4gfCBudWxsID0gbnVsbDtcbiAgICAgICAgY29uc3QgZXJyb3JzOiBbbnVtYmVyLCBBZGFwdGVyRXJyb3JdW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdF0gPSByZXN1bHRzW2ldITtcblxuICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goW2ksIGVycm9yXSk7XG5cbiAgICAgICAgICAgIGlmIChlcnJvci5xdWVyeSkge1xuICAgICAgICAgICAgICBxdWVyeSA9ICFxdWVyeSA/IGVycm9yLnF1ZXJ5IDogam9pblNlcXVlbmNlKFtxdWVyeSwgZXJyb3IucXVlcnldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5zZXJ0ZWRSb3dzLnB1c2gocmVzdWx0LnJvdyk7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQucXVlcnkpIHtcbiAgICAgICAgICAgICAgcXVlcnkgPSAhcXVlcnkgPyByZXN1bHQucXVlcnkgOiBqb2luU2VxdWVuY2UoW3F1ZXJ5LCByZXN1bHQucXVlcnldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHtcbiAgICAgICAgICAgIGVycm9yOiBuZXcgQWdncmVnYXRlRXJyb3IoXG4gICAgICAgICAgICAgIGVycm9ycy5tYXAoKFssIGVycm9yXSkgPT4gZXJyb3IpLFxuICAgICAgICAgICAgICBgUm93JHtlcnJvcnMubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn0gJHtlcnJvcnMubWFwKChbaW5kZXhdKSA9PiBpbmRleCkuam9pbihcIiwgXCIpfSBjb3VsZCBub3QgYmUgaW5zZXJ0ZWQgb3IgcmVmZXRjaGVkLmAsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5ISxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3dzOiBpbnNlcnRlZFJvd3MsIHF1ZXJ5OiBxdWVyeSEgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBpbnRyb3NwZWN0KG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGFibGVzUXVlcnkgPSBnZXRUYWJsZXNRdWVyeShyZXF1aXJlbWVudHMpO1xuICAgICAgICBjb25zdCB0aW1lem9uZVF1ZXJ5ID0gZ2V0VGltZXpvbmVRdWVyeShyZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIGNvbnN0IFtbdGFibGVzRXJyb3IsIHRhYmxlc10sIFt0aW1lem9uZUVycm9yLCB0aW1lem9uZXNdXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBleGVjdXRvci5leGVjdXRlKHRhYmxlc1F1ZXJ5LCBvcHRpb25zKSxcbiAgICAgICAgICBleGVjdXRvci5leGVjdXRlKHRpbWV6b25lUXVlcnksIG9wdGlvbnMpLFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAodGFibGVzRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRhYmxlc0Vycm9yLCBxdWVyeTogdGFibGVzUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZXpvbmVFcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogdGltZXpvbmVFcnJvciwgcXVlcnk6IHRpbWV6b25lUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lem9uZSA9IHRpbWV6b25lc1swXT8udGltZXpvbmU7XG5cbiAgICAgICAgaWYgKCF0aW1lem9uZSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogbmV3IEVycm9yKFwiVGltZXpvbmUgbm90IGZvdW5kXCIpLCBxdWVyeTogdGltZXpvbmVRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgY3JlYXRlSW50cm9zcGVjdGlvbih7IHF1ZXJ5OiB0YWJsZXNRdWVyeSwgdGFibGVzLCB0aW1lem9uZSB9KV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBxdWVyeShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyUXVlcnlSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFNlbGVjdFF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyBmaWx0ZXJlZFJvd0NvdW50OiByZXN1bHRzWzBdPy5fX3BzX2NvdW50X18gfHwgXCIwXCIsIHJvd3M6IHJlc3VsdHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyVXBkYXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdXBkYXRlUXVlcnkgPSBnZXRVcGRhdGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IHJlZmV0Y2hRdWVyeSA9IGdldFVwZGF0ZVJlZmV0Y2hRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW1t1cGRhdGVFcnJvcl0sIHJlZmV0Y2hSZXN1bHRdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZVNlcXVlbmNlKFt1cGRhdGVRdWVyeSwgcmVmZXRjaFF1ZXJ5XSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHVwZGF0ZUVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB1cGRhdGVFcnJvciwgcXVlcnk6IHVwZGF0ZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW3JlZmV0Y2hFcnJvciwgcmVzdWx0c10gPSByZWZldGNoUmVzdWx0ITtcblxuICAgICAgICBpZiAocmVmZXRjaEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiByZWZldGNoRXJyb3IsIHF1ZXJ5OiB1cGRhdGVRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtyb3ddID0gcmVzdWx0cztcblxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogbmV3IEVycm9yKFwiVXBkYXRlZCByb3cgbm90IGZvdW5kXCIpLCBxdWVyeTogdXBkYXRlUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgcm93LCBxdWVyeTogdXBkYXRlUXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludHJvc3BlY3Rpb24oYXJnczoge1xuICBxdWVyeTogUXVlcnk7XG4gIHRhYmxlczogUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRhYmxlc1F1ZXJ5PjtcbiAgdGltZXpvbmU6IHN0cmluZztcbn0pOiBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCB7XG4gIGNvbnN0IHsgcXVlcnksIHRhYmxlcywgdGltZXpvbmUgfSA9IGFyZ3M7XG5cbiAgcmV0dXJuIHRhYmxlcy5yZWR1Y2UoXG4gICAgKHJlc3VsdCwgdGFibGUpID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hcyB9ID0gcmVzdWx0O1xuICAgICAgY29uc3QgeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSB9ID0gdGFibGU7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBvc2l0aW9uIC0gYi5wb3NpdGlvbilcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoY29sdW1ucywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGF0eXBlLCBuYW1lOiBjb2x1bW5OYW1lIH0gPSBjb2x1bW47XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGV4T2ZQYXJlbnRoZXNpcyA9IGRhdGF0eXBlLmluZGV4T2YoXCIoXCIpO1xuICAgICAgICAgICAgY29uc3Qgc3RyaXBwZWREYXRhVHlwZSA9IChpbmRleE9mUGFyZW50aGVzaXMgPiAtMSA/IGRhdGF0eXBlLnN1YnN0cmluZygwLCBpbmRleE9mUGFyZW50aGVzaXMpIDogZGF0YXR5cGUpXG4gICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbnMsXG4gICAgICAgICAgICAgIFtjb2x1bW5OYW1lXToge1xuICAgICAgICAgICAgICAgIGRhdGF0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAuLi4oTVlTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQVtzdHJpcHBlZERhdGFUeXBlXSB8fCB7IGdyb3VwOiBcInJhd1wiIH0pLFxuICAgICAgICAgICAgICAgICAgaXNBcnJheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBpc05hdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHN0cmlwcGVkRGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOlxuICAgICAgICAgICAgICAgICAgICBzdHJpcHBlZERhdGFUeXBlID09PSBcImVudW1cIiA/IGRhdGF0eXBlLnNsaWNlKGBlbnVtKCdgLmxlbmd0aCwgLWAnKWAubGVuZ3RoKS5zcGxpdChgJywnYCkgOiBbXSxcbiAgICAgICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZrQ29sdW1uOiBjb2x1bW4uZmtfY29sdW1uLFxuICAgICAgICAgICAgICAgIGZrU2NoZW1hOiBzY2hlbWEsXG4gICAgICAgICAgICAgICAgZmtUYWJsZTogY29sdW1uLmZrX3RhYmxlLFxuICAgICAgICAgICAgICAgIGlzQXV0b2luY3JlbWVudDogQm9vbGVhbihjb2x1bW4uYXV0b2luY3JlbWVudCksXG4gICAgICAgICAgICAgICAgaXNDb21wdXRlZDogQm9vbGVhbihjb2x1bW4uY29tcHV0ZWQpLFxuICAgICAgICAgICAgICAgIGlzSW5QcmltYXJ5S2V5OiBCb29sZWFuKGNvbHVtbi5wayksXG4gICAgICAgICAgICAgICAgbmFtZTogY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBudWxsYWJsZTogQm9vbGVhbihjb2x1bW4ubnVsbGFibGUpLFxuICAgICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICB9IGFzIGNvbnN0IHNhdGlzZmllcyBDb2x1bW4sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30gYXMgVGFibGVbXCJjb2x1bW5zXCJdLFxuICAgICAgICApO1xuXG4gICAgICBpZiAoc2NoZW1hc1tzY2hlbWFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2NoZW1hc1tzY2hlbWFdID0geyBuYW1lOiBzY2hlbWEsIHRhYmxlczoge30gfTtcbiAgICAgIH1cblxuICAgICAgc2NoZW1hc1tzY2hlbWFdLnRhYmxlc1t0YWJsZU5hbWVdID0geyBjb2x1bW5zOiBjb2x1bW5zUmVjb3JkLCBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSB9O1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgeyBmaWx0ZXJPcGVyYXRvcnMsIHF1ZXJ5LCBzY2hlbWFzOiB7fSwgdGltZXpvbmUgfSBzYXRpc2ZpZXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHQgYXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHQsXG4gICk7XG59XG5cbmNvbnN0IGZpbHRlck9wZXJhdG9ycyA9IFtcbiAgXCI9XCIsXG4gIFwiIT1cIixcbiAgXCI+XCIsXG4gIFwiPj1cIixcbiAgXCI8XCIsXG4gIFwiPD1cIixcbiAgXCJpc1wiLFxuICBcImlzIG5vdFwiLFxuICBcImxpa2VcIixcbiAgXCJub3QgbGlrZVwiLFxuXSBzYXRpc2ZpZXMgRmlsdGVyT3BlcmF0b3JbXTtcblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tJbnRyb3NwZWN0KCkge1xuICBjb25zdCB0YWJsZXMgPSBtb2NrVGFibGVzUXVlcnkoKTtcbiAgY29uc3QgW3sgdGltZXpvbmUgfV0gPSBtb2NrVGltZXpvbmVRdWVyeSgpO1xuICBjb25zdCBxdWVyeSA9IHsgcGFyYW1ldGVyczogW10sIHNxbDogXCI8bW9ja2VkPlwiIH0gYXMgUXVlcnk7XG5cbiAgcmV0dXJuIGNyZWF0ZUludHJvc3BlY3Rpb24oeyB0YWJsZXMsIHRpbWV6b25lLCBxdWVyeSB9KSBhcyB7XG4gICAgLy8gYmVzdCBlZmZvcnQsIG5vIG5lZWQgZ28gb3ZlcmJvYXJkLlxuICAgIHNjaGVtYXM6IHtcbiAgICAgIFtLIGluICh0eXBlb2YgdGFibGVzKVtudW1iZXJdW1wic2NoZW1hXCJdXToge1xuICAgICAgICBuYW1lOiBLO1xuICAgICAgICB0YWJsZXM6IHtcbiAgICAgICAgICBbVCBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcIm5hbWVcIl1dOiBUYWJsZTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgICB0aW1lem9uZTogdHlwZW9mIHRpbWV6b25lO1xuICAgIGZpbHRlck9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXTtcbiAgICBxdWVyeTogUXVlcnk7XG4gIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0O1xufVxuXG5mdW5jdGlvbiBqb2luU2VxdWVuY2Uoc2VxdWVuY2U6IHJlYWRvbmx5IFtRdWVyeTx1bmtub3duPiwgUXVlcnk8dW5rbm93bj5dKTogUXVlcnk8dW5rbm93bj4ge1xuICBjb25zdCBbcXVlcnkwLCBxdWVyeTFdID0gc2VxdWVuY2U7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXJhbWV0ZXJzOiBxdWVyeTAucGFyYW1ldGVycy5jb25jYXQocXVlcnkxLnBhcmFtZXRlcnMpLFxuICAgIHNxbDogYCR7cXVlcnkwLnNxbH07XFxuJHtxdWVyeTEuc3FsfWAsXG4gIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCBjb25zdCBNWVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBOiBSZWNvcmQ8c3RyaW5nLCBQaWNrPERhdGFUeXBlLCBcImdyb3VwXCI+PiA9IHtcbiAgYmlnaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBiaW5hcnk6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgYml0OiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIGJsb2I6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgY2hhcjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBcImNoYXIgYmluYXJ5XCI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgZGF0ZToge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIGRhdGV0aW1lOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgZGVjOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBkZWNpbWFsOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBkb3VibGU6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIFwiZG91YmxlIHByZWNpc2lvblwiOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBlbnVtOiB7XG4gICAgZ3JvdXA6IFwiZW51bVwiLFxuICB9LFxuICBmaXhlZDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZmxvYXQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGdlb21ldHJ5OiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIGdlb21ldHJ5Y29sbGVjdGlvbjoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBpbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGludGVnZXI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGpzb246IHtcbiAgICBncm91cDogXCJqc29uXCIsXG4gIH0sXG4gIGxpbmVzdHJpbmc6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgbG9uZzoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBcImxvbmcgdmFyY2hhclwiOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGxvbmdibG9iOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGxvbmd0ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGxvbmd2YXJiaW5hcnk6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbG9uZ3ZhcmNoYXI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbWVkaXVtYmxvYjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBtZWRpdW1pbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIG1lZGl1bXRleHQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbXVsdGlsaW5lc3RyaW5nOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIG11bHRpcG9pbnQ6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgbXVsdGlwb2x5Z29uOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIG51bWVyaWM6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIHBvaW50OiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIHBvbHlnb246IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgcmVhbDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgLyoqXG4gICAqIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzkuNS9lbi9zZXQuaHRtbFxuICAgKi9cbiAgc2V0OiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIHNtYWxsaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICB0ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHRpbWU6IHtcbiAgICBncm91cDogXCJ0aW1lXCIsXG4gIH0sXG4gIHRpbWVzdGFtcDoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIHRpbnlibG9iOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHRpbnlpbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIHRpbnl0ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHZhcmJpbmFyeToge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB2YXJjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIFwidmFyY2hhciBiaW5hcnlcIjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICAvKipcbiAgICogaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOS41L2VuL3ZlY3Rvci5odG1sXG4gICAqL1xuICB2ZWN0b3I6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgeWVhcjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbn07XG4iLCAiaW1wb3J0IHsgdHlwZSBJbmZlclJlc3VsdCwgdHlwZSBSZWZlcmVuY2VFeHByZXNzaW9uLCBzcWwgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgdHlwZSB7IE9rUGFja2V0UGFyYW1zIH0gZnJvbSBcIm15c3FsMlwiO1xuXG5pbXBvcnQgdHlwZSB7IEFkYXB0ZXJEZWxldGVEZXRhaWxzLCBBZGFwdGVyUXVlcnlEZXRhaWxzLCBBZGFwdGVyVXBkYXRlRGV0YWlscywgVGFibGUgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHtcbiAgYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMsXG4gIGFwcGx5VHJhbnNmb3JtYXRpb25zLFxuICB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsXG4gIGNvbXBpbGUsXG4gIGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24sXG59IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHR5cGUgeyBCaWdJbnRTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZS11dGlsc1wiO1xuaW1wb3J0IHsgZ2V0TXlTUUxCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlclwiO1xuaW1wb3J0IHsgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlUXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJEZWxldGVEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICByb3dzLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0TXlTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShidWlsZGVyLmRlbGV0ZUZyb20odGFibGVOYW1lKS4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhyb3dzLCBjb2x1bW5zKSkuJGNhc3RUbzxPa1BhY2tldFBhcmFtcz4oKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnNlcnRRdWVyeShcbiAgZGV0YWlsczogeyByb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdOyB0YWJsZTogVGFibGUgfSxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgcm93cyxcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLmluc2VydEludG8odGFibGVOYW1lKVxuICAgICAgLnZhbHVlcyhhcHBseVRyYW5zZm9ybWF0aW9ucyhcImluc2VydFwiLCByb3dzLCBjb2x1bW5zKSlcbiAgICAgIC4kY2FzdFRvPE9rUGFja2V0UGFyYW1zPigpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0UmVmZXRjaFF1ZXJ5KFxuICBkZXRhaWxzOiB7IGNyaXRlcmlhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdOyB0YWJsZTogVGFibGUgfSxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgY3JpdGVyaWEsXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRNeVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC5zZWxlY3RGcm9tKHRhYmxlTmFtZSlcbiAgICAgIC4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhjcml0ZXJpYSwgY29sdW1ucykpXG4gICAgICAuc2VsZWN0KE9iamVjdC5rZXlzKGNvbHVtbnMpKVxuICAgICAgLnNlbGVjdChnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzKCkuYXMoXCJfX3BzX2luc2VydGVkX2F0X19cIikpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBkYXRlUmVmZXRjaFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgY2hhbmdlcyxcbiAgICByb3csXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRNeVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC5zZWxlY3RGcm9tKHRhYmxlTmFtZSlcbiAgICAgIC4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhbeyAuLi5yb3csIC4uLmNoYW5nZXMgfV0sIGNvbHVtbnMpKVxuICAgICAgLnNlbGVjdChPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC5zZWxlY3QoZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpLmFzKFwiX19wc191cGRhdGVkX2F0X19cIikpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJRdWVyeURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGZpbHRlciA9IHsgYWZ0ZXI6IFwiYW5kXCIsIGZpbHRlcnM6IFtdLCBraW5kOiBcIkZpbHRlckdyb3VwXCIgfSxcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydE9yZGVyLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0TXlTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICBjb25zdCBmaWx0ZXJFeHByZXNzaW9uID0gZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbihmaWx0ZXIuZmlsdGVycywgY29sdW1ucyk7XG5cbiAgY29uc3QgY291bnRRdWVyeSA9IGJ1aWxkZXJcbiAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgLnNlbGVjdCgoZWIpID0+IGViLmNhc3Q8QmlnSW50U3RyaW5nPihlYi5mbi5jb2FsZXNjZShlYi5mbi5jb3VudEFsbCgpLCBzcWwubGl0KDApKSwgXCJjaGFyXCIpLmFzKFwidmFsdWVcIikpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoKFwiY291bnRcIiwgKCkgPT4gY291bnRRdWVyeSlcbiAgICAgIC5zZWxlY3RGcm9tKFt0YWJsZU5hbWUsIFwiY291bnRcIl0pXG4gICAgICAvLyBUT0RPOiBjdXJzb3IgcGFnaW5hdGlvbj9cbiAgICAgIC53aGVyZShmaWx0ZXJFeHByZXNzaW9uKVxuICAgICAgLnNlbGVjdChPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC5zZWxlY3QoXG4gICAgICAgIHNxbFxuICAgICAgICAgIC5yZWY8QmlnSW50U3RyaW5nPihcbiAgICAgICAgICAgIFwiY291bnQudmFsdWVcIiBzYXRpc2ZpZXMgUmVmZXJlbmNlRXhwcmVzc2lvbjx7IGNvdW50OiBJbmZlclJlc3VsdDx0eXBlb2YgY291bnRRdWVyeT5bbnVtYmVyXSB9LCBcImNvdW50XCI+LFxuICAgICAgICAgIClcbiAgICAgICAgICAuYXMoXCJfX3BzX2NvdW50X19cIiksXG4gICAgICApXG4gICAgICAuJGNhbGwoKHFiKSA9PiBzb3J0T3JkZXIucmVkdWNlKChxYiwgaXRlbSkgPT4gcWIub3JkZXJCeShpdGVtLmNvbHVtbiwgaXRlbS5kaXJlY3Rpb24pLCBxYikpXG4gICAgICAubGltaXQocGFnZVNpemUpXG4gICAgICAvLyB3ZSdyZSBpbmplY3RpbmcgdGhlIG9mZnNldCB2YWx1ZSBoZXJlIHRvIGF2b2lkIHNlcmlhbGl6YXRpb24gY29tcGxleGl0eSAoYGJpZ2ludGAgaXMgYSBuby1nbyBmb3IgYEpTT04uc3RyaW5naWZ5YCkuXG4gICAgICAub2Zmc2V0KHNxbC5saXQoQmlnSW50KHBhZ2VJbmRleCkgKiBCaWdJbnQocGFnZVNpemUpKSksXG4gICk7XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrU2VsZWN0UXVlcnkoKSB7XG4gIC8vIFRPRE86IC4uLlxuICByZXR1cm4gW10gYXMgY29uc3Qgc2F0aXNmaWVzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCBubyBuZWVkIHRvIGdvIG92ZXJib2FyZFxuICAgIFtLIGluIFJldHVyblR5cGU8dHlwZW9mIG1vY2tUYWJsZXNRdWVyeT5bMV1bXCJjb2x1bW5zXCJdW251bWJlcl1bXCJuYW1lXCJdIHwgXCJfX3BzX2NvdW50X19cIl06IHVua25vd247XG4gIH1bXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgY2hhbmdlcyxcbiAgICByb3csXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgICAgLnVwZGF0ZVRhYmxlKHRhYmxlTmFtZSlcbiAgICAgIC5zZXQoYXBwbHlUcmFuc2Zvcm1hdGlvbnMoXCJ1cGRhdGVcIiwgY2hhbmdlcywgY29sdW1ucykpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMoW3Jvd10sIGNvbHVtbnMpKVxuICAgICAgLiRjYXN0VG88T2tQYWNrZXRQYXJhbXM+KCksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKSB7XG4gIHJldHVybiBzcWw8bnVtYmVyIHwgc3RyaW5nPmBjYXN0KHVuaXhfdGltZXN0YW1wKG5vdygzKSkgKiAxMDAwIGFzIHVuc2lnbmVkKWA7XG59XG4iLCAiaW1wb3J0IHsgdHlwZSBLeXNlbHksIE15c3FsQWRhcHRlciwgTXlzcWxRdWVyeUNvbXBpbGVyIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGdldEJ1aWxkZXIgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRNeVNRTEJ1aWxkZXI8RGF0YWJhc2UgPSBhbnk+KFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKTogS3lzZWx5PERhdGFiYXNlPiB7XG4gIHJldHVybiBnZXRCdWlsZGVyKHsgLi4ucmVxdWlyZW1lbnRzLCBBZGFwdGVyOiBNeXNxbEFkYXB0ZXIsIFF1ZXJ5Q29tcGlsZXI6IE15c3FsUXVlcnlDb21waWxlciB9KTtcbn1cbiIsICJpbXBvcnQgeyBzcWwgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSBcImt5c2VseS9oZWxwZXJzL215c3FsXCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgY29tcGlsZSwgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgZ2V0TXlTUUxCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlclwiO1xuXG5pbnRlcmZhY2UgRGF0YWJhc2Uge1xuICAvKiogaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOC40L2VuL2luZm9ybWF0aW9uLXNjaGVtYS1jb2x1bW5zLXRhYmxlLmh0bWwgKi9cbiAgXCJpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1uc1wiOiB7XG4gICAgVEFCTEVfU0NIRU1BOiBzdHJpbmc7XG4gICAgVEFCTEVfTkFNRTogc3RyaW5nO1xuICAgIENPTFVNTl9OQU1FOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uIHdpdGhpbiB0aGUgdGFibGUuIE9SRElOQUxfUE9TSVRJT04gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgeW91IG1pZ2h0IHdhbnQgdG8gc2F5IE9SREVSIEJZIE9SRElOQUxfUE9TSVRJT04uIFVubGlrZSBTSE9XIENPTFVNTlMsIFNFTEVDVCBmcm9tIHRoZSBDT0xVTU5TIHRhYmxlIGRvZXMgbm90IGhhdmUgYXV0b21hdGljIG9yZGVyaW5nLiAqL1xuICAgIE9SRElOQUxfUE9TSVRJT046IG51bWJlcjtcbiAgICAvKiogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjb2x1bW4uIFRoaXMgaXMgTlVMTCBpZiB0aGUgY29sdW1uIGhhcyBhbiBleHBsaWNpdCBkZWZhdWx0IG9mIE5VTEwsIG9yIGlmIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBpbmNsdWRlcyBubyBERUZBVUxUIGNsYXVzZS4gKi9cbiAgICBDT0xVTU5fREVGQVVMVDogdW5rbm93bjtcbiAgICBJU19OVUxMQUJMRTogXCJZRVNcIiB8IFwiTk9cIjtcbiAgICAvKiogQ29udGFpbnMgdGhlIHR5cGUgbmFtZSBhbmQgcG9zc2libHkgb3RoZXIgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgcHJlY2lzaW9uIG9yIGxlbmd0aC4gKi9cbiAgICBDT0xVTU5fVFlQRTogc3RyaW5nO1xuICAgIC8qKiBlbXB0eSAtIG5vdCBpbmRleGVkIG9yIGlzIHNlY29uZGFyeSBjb2x1bW4gaW4gYSBtdWx0aS1jb2x1bW4gbm9udW5pcXVlIGluZGV4LiBQUkkgLSBwYXJ0IG9mIGEgcHJpbWFyeSBrZXkuIFVOSSAtIGZpcnN0IGNvbHVtbiBvZiBhIHVuaXF1ZSBpbmRleC4gTVVMIC0gZmlyc3QgY29sdW1uIG9mIGEgbm9udW5pcXVlIGluZGV4ICovXG4gICAgQ09MVU1OX0tFWTogXCJcIiB8IFwiUFJJXCIgfCBcIlVOSVwiIHwgXCJNVUxcIjtcbiAgICAvKiogRXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbHVtbi4gUG9zc2libGUgdmFsdWVzIGFyZSAqL1xuICAgIEVYVFJBOlxuICAgICAgfCBcIlwiXG4gICAgICB8IFwiYXV0b19pbmNyZW1lbnRcIlxuICAgICAgfCBcIm9uIHVwZGF0ZSBDVVJSRU5UX1RJTUVTVEFNUFwiXG4gICAgICB8IFwiU1RPUkVEIEdFTkVSQVRFRFwiXG4gICAgICB8IFwiVklSVFVBTCBHRU5FUkFURURcIlxuICAgICAgfCBcIkRFRkFVTFQgR0VORVJBVEVEXCI7XG4gICAgLyoqIEZvciBnZW5lcmF0ZWQgY29sdW1ucywgZGlzcGxheXMgdGhlIGV4cHJlc3Npb24gdXNlZCB0byBjb21wdXRlIGNvbHVtbiB2YWx1ZXMuIEVtcHR5IGZvciBub25nZW5lcmF0ZWQgY29sdW1ucy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGdlbmVyYXRlZCBjb2x1bW5zLCBzZWUgU2VjdGlvbiAxNS4xLjIwLjgsIFx1MjAxQ0NSRUFURSBUQUJMRSBhbmQgR2VuZXJhdGVkIENvbHVtbnNcdTIwMUQuICovXG4gICAgR0VORVJBVElPTl9FWFBSRVNTSU9OOiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzguNC9lbi9pbmZvcm1hdGlvbi1zY2hlbWEtdGFibGVzLXRhYmxlLmh0bWwgKi9cbiAgXCJpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzXCI6IHtcbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIHNjaGVtYSAoZGF0YWJhc2UpIHRvIHdoaWNoIHRoZSB0YWJsZSBiZWxvbmdzLiAqL1xuICAgIFRBQkxFX1NDSEVNQTogc3RyaW5nO1xuICAgIFRBQkxFX05BTUU6IHN0cmluZztcbiAgICAvKiogQkFTRSBUQUJMRSBmb3IgYSB0YWJsZSwgVklFVyBmb3IgYSB2aWV3LCBvciBTWVNURU0gVklFVyBmb3IgYW4gSU5GT1JNQVRJT05fU0NIRU1BIHRhYmxlLiAqL1xuICAgIFRBQkxFX1RZUEU6IFwiQkFTRSBUQUJMRVwiIHwgXCJWSUVXXCIgfCBcIlNZU1RFTSBWSUVXXCI7XG4gIH07XG5cbiAgLyoqIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzguNC9lbi9pbmZvcm1hdGlvbi1zY2hlbWEta2V5LWNvbHVtbi11c2FnZS10YWJsZS5odG1sICovXG4gIFwiaW5mb3JtYXRpb25fc2NoZW1hLktFWV9DT0xVTU5fVVNBR0VcIjoge1xuICAgIENPTlNUUkFJTlRfU0NIRU1BOiBzdHJpbmc7XG4gICAgQ09OU1RSQUlOVF9OQU1FOiBzdHJpbmc7XG4gICAgVEFCTEVfU0NIRU1BOiBzdHJpbmc7XG4gICAgVEFCTEVfTkFNRTogc3RyaW5nO1xuICAgIENPTFVNTl9OQU1FOiBzdHJpbmc7XG4gICAgLyoqIG51bGwgLSB3aGVuIHVuaXF1ZSBvciBwcmltYXJ5IGtleSBjb25zdHJhaW50LiAxLW4gLSB3aGVuIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgKi9cbiAgICBQT1NJVElPTl9JTl9VTklRVUVfQ09OU1RSQUlOVDogbnVtYmVyIHwgbnVsbDtcbiAgICBSRUZFUkVOQ0VEX1RBQkxFX1NDSEVNQTogc3RyaW5nO1xuICAgIFJFRkVSRU5DRURfVEFCTEVfTkFNRTogc3RyaW5nO1xuICAgIFJFRkVSRU5DRURfQ09MVU1OX05BTUU6IHN0cmluZztcbiAgfTtcblxuICAvKiogaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOC40L2VuL2luZm9ybWF0aW9uLXNjaGVtYS10YWJsZS1jb25zdHJhaW50cy10YWJsZS5odG1sICovXG4gIFwiaW5mb3JtYXRpb25fc2NoZW1hLlRBQkxFX0NPTlNUUkFJTlRTXCI6IHtcbiAgICBDT05TVFJBSU5UX1NDSEVNQTogc3RyaW5nO1xuICAgIENPTlNUUkFJTlRfTkFNRTogc3RyaW5nO1xuICAgIFRBQkxFX1NDSEVNQTogc3RyaW5nO1xuICAgIFRBQkxFX05BTUU6IHN0cmluZztcbiAgICBDT05TVFJBSU5UX1RZUEU6IFwiUFJJTUFSWSBLRVlcIiB8IFwiRk9SRUlHTiBLRVlcIiB8IFwiVU5JUVVFXCIgfCBcIkNIRUNLXCI7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZXNRdWVyeShyZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+KSB7XG4gIHJldHVybiBjb21waWxlKFxuICAgIGdldE15U1FMQnVpbGRlcjxEYXRhYmFzZT4ocmVxdWlyZW1lbnRzKVxuICAgICAgLnNlbGVjdEZyb20oXCJpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIGFzIHRcIilcbiAgICAgIC53aGVyZShcInQuVEFCTEVfU0NIRU1BXCIsIFwiPVwiLCBzcWw8c3RyaW5nPmBkYXRhYmFzZSgpYClcbiAgICAgIC53aGVyZShcInQuVEFCTEVfVFlQRVwiLCBcImluXCIsIFtcIkJBU0UgVEFCTEVcIiwgXCJWSUVXXCJdKVxuICAgICAgLnNlbGVjdChbXCJ0LlRBQkxFX1NDSEVNQSBhcyBzY2hlbWFcIiwgXCJ0LlRBQkxFX05BTUUgYXMgbmFtZVwiLCBcInQuVEFCTEVfVFlQRSBhcyB0eXBlXCJdKVxuICAgICAgLiRuYXJyb3dUeXBlPHsgdHlwZTogXCJCQVNFIFRBQkxFXCIgfCBcIlZJRVdcIiB9PigpXG4gICAgICAuc2VsZWN0KChlYikgPT5cbiAgICAgICAgLy8gYGpzb25fYXJyYXlhZ2dgIGlnbm9yZXMgYG9yZGVyIGJ5YCBpbnNpZGUgdGhlIHN1YnF1ZXJ5LCBzbyB3ZSBuZWVkIHRvIG9yZGVyIGFmdGVyIGFnZ3JlZ2F0aW9uLlxuICAgICAgICBqc29uQXJyYXlGcm9tKFxuICAgICAgICAgIGViXG4gICAgICAgICAgICAuc2VsZWN0RnJvbShcImluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIGFzIGNcIilcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcImluZm9ybWF0aW9uX3NjaGVtYS5LRVlfQ09MVU1OX1VTQUdFIGFzIGtjdVwiLCAoamIpID0+XG4gICAgICAgICAgICAgIGpiXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwia2N1LlRBQkxFX1NDSEVNQVwiLCBcIj1cIiwgXCJjLlRBQkxFX1NDSEVNQVwiKVxuICAgICAgICAgICAgICAgIC5vblJlZihcImtjdS5UQUJMRV9OQU1FXCIsIFwiPVwiLCBcImMuVEFCTEVfTkFNRVwiKVxuICAgICAgICAgICAgICAgIC5vblJlZihcImtjdS5DT0xVTU5fTkFNRVwiLCBcIj1cIiwgXCJjLkNPTFVNTl9OQU1FXCIpXG4gICAgICAgICAgICAgICAgLy8gb25seSBnZXQgZm9yZWlnbiBrZXkgY29uc3RyYWludHNcbiAgICAgICAgICAgICAgICAub24oXCJrY3UuUE9TSVRJT05fSU5fVU5JUVVFX0NPTlNUUkFJTlRcIiwgXCJpcyBub3RcIiwgbnVsbCksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAud2hlcmVSZWYoXCJjLlRBQkxFX1NDSEVNQVwiLCBcIj1cIiwgXCJ0LlRBQkxFX1NDSEVNQVwiKVxuICAgICAgICAgICAgLndoZXJlUmVmKFwiYy5UQUJMRV9OQU1FXCIsIFwiPVwiLCBcInQuVEFCTEVfTkFNRVwiKVxuICAgICAgICAgICAgLnNlbGVjdChbXG4gICAgICAgICAgICAgIFwiYy5DT0xVTU5fTkFNRSBhcyBuYW1lXCIsXG4gICAgICAgICAgICAgIFwiYy5DT0xVTU5fVFlQRSBhcyBkYXRhdHlwZVwiLFxuICAgICAgICAgICAgICBcImMuT1JESU5BTF9QT1NJVElPTiBhcyBwb3NpdGlvblwiLFxuICAgICAgICAgICAgICBcImtjdS5SRUZFUkVOQ0VEX1RBQkxFX05BTUUgYXMgZmtfdGFibGVcIixcbiAgICAgICAgICAgICAgXCJrY3UuUkVGRVJFTkNFRF9DT0xVTU5fTkFNRSBhcyBma19jb2x1bW5cIixcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAgICAgICAgICBlYihcImMuRVhUUkFcIiwgXCI9XCIsIFwiYXV0b19pbmNyZW1lbnRcIikuYXMoXCJhdXRvaW5jcmVtZW50XCIpLFxuICAgICAgICAgICAgICBlYihcImMuRVhUUkFcIiwgXCJpblwiLCBbXCJvbiB1cGRhdGUgQ1VSUkVOVF9USU1FU1RBTVBcIiwgXCJTVE9SRUQgR0VORVJBVEVEXCIsIFwiVklSVFVBTCBHRU5FUkFURURcIl0pLmFzKFxuICAgICAgICAgICAgICAgIFwiY29tcHV0ZWRcIixcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZWIoXCJjLkNPTFVNTl9LRVlcIiwgXCI9XCIsIFwiUFJJXCIpLmFzKFwicGtcIiksXG4gICAgICAgICAgICAgIGViKFwiYy5JU19OVUxMQUJMRVwiLCBcIj1cIiwgXCJZRVNcIikuYXMoXCJudWxsYWJsZVwiKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICApLmFzKFwiY29sdW1uc1wiKSxcbiAgICAgIClcbiAgICAgIC5vcmRlckJ5KFwidC5UQUJMRV9TQ0hFTUFcIilcbiAgICAgIC5vcmRlckJ5KFwidC5UQUJMRV9OQU1FXCIpXG4gICAgICAub3JkZXJCeShcInQuVEFCTEVfVFlQRVwiKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUYWJsZXNRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImludFwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgcG9zaXRpb246IDEsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImJpbmFyeSgxNilcIixcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJ1dWlkXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgcG9zaXRpb246IDIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInZhcmNoYXIoMjU1KVwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBwb3NpdGlvbjogMyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDEsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcImlkX25hbWVcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBwb3NpdGlvbjogNCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBuYW1lOiBcImFuaW1hbHNcIixcbiAgICAgIHNjaGVtYTogXCJzdHVkaW9cIixcbiAgICAgIHR5cGU6IFwiQkFTRSBUQUJMRVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMSxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJpbnRcIixcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIHBvc2l0aW9uOiAxLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgcG9zaXRpb246IDIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImVudW0oJ2FkbWluJywnbWFpbnRhaW5lcicsJ21lbWJlcicpXCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwicm9sZVwiLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIHBvc2l0aW9uOiAzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJpbnRcIixcbiAgICAgICAgICBma19jb2x1bW46IFwiaWRcIixcbiAgICAgICAgICBma190YWJsZTogXCJhbmltYWxzXCIsXG4gICAgICAgICAgbmFtZTogXCJhbmltYWxfaWRcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBwb3NpdGlvbjogNCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBuYW1lOiBcInVzZXJzXCIsXG4gICAgICBzY2hlbWE6IFwic3R1ZGlvXCIsXG4gICAgICB0eXBlOiBcIkJBU0UgVEFCTEVcIixcbiAgICB9LFxuICBdIGFzIGNvbnN0IHNhdGlzZmllcyBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXpvbmVRdWVyeShyZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+KSB7XG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRNeVNRTEJ1aWxkZXIocmVxdWlyZW1lbnRzKTtcblxuICBjb25zdCBzZXNzaW9uVHogPSBzcWw8XCJTWVNURU1cIiB8IChzdHJpbmcgJiB7fSk+YEBAc2Vzc2lvbi50aW1lX3pvbmVgO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC5zZWxlY3ROb0Zyb20oXG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAuY2FzZSgpXG4gICAgICAgICAgLndoZW4oc2Vzc2lvblR6LCBcIj1cIiwgXCJTWVNURU1cIilcbiAgICAgICAgICAudGhlbihzcWw8c3RyaW5nPmBAQHN5c3RlbV90aW1lX3pvbmVgKVxuICAgICAgICAgIC5lbHNlKHNlc3Npb25UeilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAuYXMoXCJ0aW1lem9uZVwiKSxcbiAgICAgIClcbiAgICAgIC4kbmFycm93VHlwZTx7IHRpbWV6b25lOiBzdHJpbmcgfT4oKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUaW1lem9uZVF1ZXJ5KCkge1xuICByZXR1cm4gW3sgdGltZXpvbmU6IFwiVVRDXCIgfV0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUaW1lem9uZVF1ZXJ5Pjtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vbXlzcWwuZC50c1wiIC8+XG5pbXBvcnQgeyBzcWwgfSBmcm9tICcuLi9yYXctYnVpbGRlci9zcWwuanMnO1xuaW1wb3J0IHsgZ2V0SnNvbk9iamVjdEFyZ3MgfSBmcm9tICcuLi91dGlsL2pzb24tb2JqZWN0LWFyZ3MuanMnO1xuLyoqXG4gKiBBIE15U1FMIGhlbHBlciBmb3IgYWdncmVnYXRpbmcgYSBzdWJxdWVyeSBpbnRvIGEgSlNPTiBhcnJheS5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gZnVsbHkgd29yayB3aXRoIHRoZSBidWlsdC1pbiBgTXlzcWxEaWFsZWN0YC5cbiAqIFdoaWxlIHRoZSBwcm9kdWNlZCBTUUwgaXMgY29tcGF0aWJsZSB3aXRoIGFsbCBNeVNRTCBkYXRhYmFzZXMsIHNvbWUgdGhpcmQtcGFydHkgZGlhbGVjdHNcbiAqIG1heSBub3QgcGFyc2UgdGhlIG5lc3RlZCBKU09OIGludG8gYXJyYXlzLiBJbiB0aGVzZSBjYXNlcyB5b3UgY2FuIHVzZSB0aGUgYnVpbHQgaW5cbiAqIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYCB0byBwYXJzZSB0aGUgcmVzdWx0cy5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbkFycmF5RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL215c3FsJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkFycmF5RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLm9yZGVyQnkoJ3BldC5uYW1lJylcbiAqICAgICApLmFzKCdwZXRzJylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXT8ucGV0X2lkXG4gKiByZXN1bHRbMF0/LnBldHNbMF0/Lm5hbWVcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgYGlkYCwgKFxuICogICBzZWxlY3QgY2FzdChjb2FsZXNjZShqc29uX2FycmF5YWdnKGpzb25fb2JqZWN0KFxuICogICAgICdwZXRfaWQnLCBgYWdnYC5gcGV0X2lkYCxcbiAqICAgICAnbmFtZScsIGBhZ2dgLmBuYW1lYFxuICogICApKSwgJ1tdJykgYXMganNvbikgZnJvbSAoXG4gKiAgICAgc2VsZWN0IGBwZXRgLmBpZGAgYXMgYHBldF9pZGAsIGBwZXRgLmBuYW1lYFxuICogICAgIGZyb20gYHBldGBcbiAqICAgICB3aGVyZSBgcGV0YC5gb3duZXJfaWRgID0gYHBlcnNvbmAuYGlkYFxuICogICAgIG9yZGVyIGJ5IGBwZXRgLmBuYW1lYFxuICogICApIGFzIGBhZ2dgXG4gKiApIGFzIGBwZXRzYFxuICogZnJvbSBgcGVyc29uYFxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQXJyYXlGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGNhc3QoY29hbGVzY2UoanNvbl9hcnJheWFnZyhqc29uX29iamVjdCgke3NxbC5qb2luKGdldE15c3FsSnNvbk9iamVjdEFyZ3MoZXhwci50b09wZXJhdGlvbk5vZGUoKSwgJ2FnZycpKX0pKSwgJ1tdJykgYXMganNvbikgZnJvbSAke2V4cHJ9IGFzIGFnZylgO1xufVxuLyoqXG4gKiBBIE15U1FMIGhlbHBlciBmb3IgdHVybmluZyBhIHN1YnF1ZXJ5IGludG8gYSBKU09OIG9iamVjdC5cbiAqXG4gKiBUaGUgc3VicXVlcnkgbXVzdCBvbmx5IHJldHVybiBvbmUgcm93LlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBmdWxseSB3b3JrIHdpdGggdGhlIGJ1aWx0LWluIGBNeXNxbERpYWxlY3RgLlxuICogV2hpbGUgdGhlIHByb2R1Y2VkIFNRTCBpcyBjb21wYXRpYmxlIHdpdGggYWxsIE15U1FMIGRhdGFiYXNlcywgc29tZSB0aGlyZC1wYXJ0eSBkaWFsZWN0c1xuICogbWF5IG5vdCBwYXJzZSB0aGUgbmVzdGVkIEpTT04gaW50byBvYmplY3RzLiBJbiB0aGVzZSBjYXNlcyB5b3UgY2FuIHVzZSB0aGUgYnVpbHQgaW5cbiAqIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYCB0byBwYXJzZSB0aGUgcmVzdWx0cy5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbk9iamVjdEZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9teXNxbCdcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25PYmplY3RGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAud2hlcmUoJ3BldC5pc19mYXZvcml0ZScsICc9JywgdHJ1ZSlcbiAqICAgICApLmFzKCdmYXZvcml0ZV9wZXQnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5mYXZvcml0ZV9wZXQ/LnBldF9pZFxuICogcmVzdWx0WzBdPy5mYXZvcml0ZV9wZXQ/Lm5hbWVcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgYGlkYCwgKFxuICogICBzZWxlY3QganNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIGBvYmpgLmBwZXRfaWRgLFxuICogICAgICduYW1lJywgYG9iamAuYG5hbWVgXG4gKiAgICkgZnJvbSAoXG4gKiAgICAgc2VsZWN0IGBwZXRgLmBpZGAgYXMgYHBldF9pZGAsIGBwZXRgLmBuYW1lYFxuICogICAgIGZyb20gYHBldGBcbiAqICAgICB3aGVyZSBgcGV0YC5gb3duZXJfaWRgID0gYHBlcnNvbmAuYGlkYFxuICogICAgIGFuZCBgcGV0YC5gaXNfZmF2b3JpdGVgID0gP1xuICogICApIGFzIG9ialxuICogKSBhcyBgZmF2b3JpdGVfcGV0YFxuICogZnJvbSBgcGVyc29uYFxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uT2JqZWN0RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCBqc29uX29iamVjdCgke3NxbC5qb2luKGdldE15c3FsSnNvbk9iamVjdEFyZ3MoZXhwci50b09wZXJhdGlvbk5vZGUoKSwgJ29iaicpKX0pIGZyb20gJHtleHByfSBhcyBvYmopYDtcbn1cbi8qKlxuICogVGhlIE15U1FMIGBqc29uX29iamVjdGAgZnVuY3Rpb24uXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgaXMgb25seSBndWFyYW50ZWVkIHRvIGZ1bGx5IHdvcmsgd2l0aCB0aGUgYnVpbHQtaW4gYE15c3FsRGlhbGVjdGAuXG4gKiBXaGlsZSB0aGUgcHJvZHVjZWQgU1FMIGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgTXlTUUwgZGF0YWJhc2VzLCBzb21lIHRoaXJkLXBhcnR5IGRpYWxlY3RzXG4gKiBtYXkgbm90IHBhcnNlIHRoZSBuZXN0ZWQgSlNPTiBpbnRvIG9iamVjdHMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25CdWlsZE9iamVjdCh7XG4gKiAgICAgICBmaXJzdDogZWIucmVmKCdmaXJzdF9uYW1lJyksXG4gKiAgICAgICBsYXN0OiBlYi5yZWYoJ2xhc3RfbmFtZScpLFxuICogICAgICAgZnVsbDogZWIuZm4oJ2NvbmNhdCcsIFsnZmlyc3RfbmFtZScsIGViLnZhbCgnICcpLCAnbGFzdF9uYW1lJ10pXG4gKiAgICAgfSkuYXMoJ25hbWUnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5uYW1lLmZpcnN0XG4gKiByZXN1bHRbMF0/Lm5hbWUubGFzdFxuICogcmVzdWx0WzBdPy5uYW1lLmZ1bGxcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCBqc29uX29iamVjdChcbiAqICAgJ2ZpcnN0JywgZmlyc3RfbmFtZSxcbiAqICAgJ2xhc3QnLCBsYXN0X25hbWUsXG4gKiAgICdmdWxsJywgY29uY2F0KGBmaXJzdF9uYW1lYCwgPywgYGxhc3RfbmFtZWApXG4gKiApIGFzIFwibmFtZVwiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkJ1aWxkT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBzcWwgYGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oT2JqZWN0LmtleXMob2JqKS5mbGF0TWFwKChrKSA9PiBbc3FsLmxpdChrKSwgb2JqW2tdXSkpfSlgO1xufVxuZnVuY3Rpb24gZ2V0TXlzcWxKc29uT2JqZWN0QXJncyhub2RlLCB0YWJsZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBnZXRKc29uT2JqZWN0QXJncyhub2RlLCB0YWJsZSk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNeVNRTCBqc29uQXJyYXlGcm9tIGFuZCBqc29uT2JqZWN0RnJvbSBmdW5jdGlvbnMgY2FuIG9ubHkgaGFuZGxlIGV4cGxpY2l0IHNlbGVjdGlvbnMgZHVlIHRvIGxpbWl0YXRpb25zIG9mIHRoZSBqc29uX29iamVjdCBmdW5jdGlvbi4gc2VsZWN0QWxsKCkgaXMgbm90IGFsbG93ZWQgaW4gdGhlIHN1YnF1ZXJ5LicpO1xuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7O3FSQUFBQSxJQ0FBQyxJQ0FBQyxJQUVPLElBQU1DLEVBQXdFLENBQ25GLE9BQVEsQ0FDTixNQUFPLFNBQ1QsRUFDQSxPQUFRLENBQ04sTUFBTyxRQUNULEVBQ0EsSUFBSyxDQUNILE1BQU8sS0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFFBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxRQUNULEVBQ0EsY0FBZSxDQUNiLE1BQU8sUUFDVCxFQUNBLEtB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QUFKLEVBQVEsU0FBQUcsRUFBVSxNQUZqQyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUssVUFBVyxDQUVLLENBQUMsQ0FjeEQsQ0FFQSxTQUFTckIsRUFBYUgsRUFBcUUsQ0FDekYsR0FBTSxDQUFDK0MsRUFBUUMsQ0FBTSxFQUFJaEQsRUFFekIsTUFBTyxDQUNMLFdBQVkrQyxFQUFPLFdBQVcsT0FBT0MsRUFBTyxVQUFVLEVBQ3RELElBQUssR0FBR0QsRUFBTyxHQUFHO0FBQUEsRUFBTUMsRUFBTyxHQUFHLEVBQ3BDLENBQ0YiLAogICJuYW1lcyI6IFsiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiTVlTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJnZXRNeVNRTEJ1aWxkZXIiLCAicmVxdWlyZW1lbnRzIiwgImdldEJ1aWxkZXIiLCAiTXlzcWxBZGFwdGVyIiwgIk15c3FsUXVlcnlDb21waWxlciIsICJnZXREZWxldGVRdWVyeSIsICJkZXRhaWxzIiwgInJlcXVpcmVtZW50cyIsICJyb3dzIiwgImNvbHVtbnMiLCAidGFibGVOYW1lIiwgImJ1aWxkZXIiLCAiZ2V0TXlTUUxCdWlsZGVyIiwgImNvbXBpbGUiLCAiYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAiYXBwbHlUcmFuc2Zvcm1hdGlvbnMiLCAiZ2V0SW5zZXJ0UmVmZXRjaFF1ZXJ5IiwgImNyaXRlcmlhIiwgImdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMiLCAiZ2V0VXBkYXRlUmVmZXRjaFF1ZXJ5IiwgImNoYW5nZXMiLCAicm93IiwgImdldFNlbGVjdFF1ZXJ5IiwgImZpbHRlciIsICJwYWdlSW5kZXgiLCAicGFnZVNpemUiLCAic29ydE9yZGVyIiwgImZpbHRlckV4cHJlc3Npb24iLCAiZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbiIsICJjb3VudFF1ZXJ5IiwgImViIiwgInNxbCIsICJxYiIsICJpdGVtIiwgIm1vY2tTZWxlY3RRdWVyeSIsICJnZXRVcGRhdGVRdWVyeSIsICJzY2hlbWEiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAianNvbkFycmF5RnJvbSIsICJleHByIiwgInNxbCIsICJnZXRNeXNxbEpzb25PYmplY3RBcmdzIiwgImdldE15c3FsSnNvbk9iamVjdEFyZ3MiLCAibm9kZSIsICJ0YWJsZSIsICJnZXRKc29uT2JqZWN0QXJncyIsICJnZXRUYWJsZXNRdWVyeSIsICJyZXF1aXJlbWVudHMiLCAiY29tcGlsZSIsICJnZXRNeVNRTEJ1aWxkZXIiLCAic3FsIiwgImViIiwgImpzb25BcnJheUZyb20iLCAiamIiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgImdldFRpbWV6b25lUXVlcnkiLCAiYnVpbGRlciIsICJzZXNzaW9uVHoiLCAibW9ja1RpbWV6b25lUXVlcnkiLCAiY3JlYXRlTXlTUUxBZGFwdGVyIiwgInJlcXVpcmVtZW50cyIsICJleGVjdXRvciIsICJvdGhlclJlcXVpcmVtZW50cyIsICJkZXRhaWxzIiwgIm9wdGlvbnMiLCAicXVlcnkiLCAiZ2V0RGVsZXRlUXVlcnkiLCAiZXJyb3IiLCAiY3JlYXRlQWRhcHRlckVycm9yIiwgInJvd3MiLCAidGFibGUiLCAiY29sdW1ucyIsICJhdXRvaW5jcmVtZW50Q29sdW1uIiwgImNvbHVtbiIsICJmaWx0ZXJPYmplY3RzIiwgInJvdyIsICJpbmZlckZpbHRlck9iamVjdCIsICJoYXNQYXJ0aWFsRmlsdGVyT2JqZWN0cyIsICJmaWx0ZXJPYmplY3QiLCAiZmlsdGVyVmFsdWVzIiwgInZhbHVlIiwgImdldEluc2VydFF1ZXJ5IiwgImluc2VydFF1ZXJ5IiwgInJlZmV0Y2hRdWVyeSIsICJnZXRJbnNlcnRSZWZldGNoUXVlcnkiLCAic2VxdWVuY2UiLCAiaW5zZXJ0RXJyb3IiLCAibWF5YmVSZWZldGNoUmVzdWx0IiwgImpvaW5TZXF1ZW5jZSIsICJyZWZldGNoRXJyb3IiLCAicmVmZXRjaFJlc3VsdHMiLCAicmVzdWx0cyIsICJyZXN1bHQiLCAiYXV0b2luY3JlbWVudENvbHVtbk5hbWUiLCAiYWNjIiwgImNvbHVtbk5hbWUiLCAicmVmZXRjaGVkUm93IiwgImluc2VydGVkUm93cyIsICJlcnJvcnMiLCAiaSIsICJpbmRleCIsICJ0YWJsZXNRdWVyeSIsICJnZXRUYWJsZXNRdWVyeSIsICJ0aW1lem9uZVF1ZXJ5IiwgImdldFRpbWV6b25lUXVlcnkiLCAidGFibGVzRXJyb3IiLCAidGFibGVzIiwgInRpbWV6b25lRXJyb3IiLCAidGltZXpvbmVzIiwgInRpbWV6b25lIiwgImNyZWF0ZUludHJvc3BlY3Rpb24iLCAiZ2V0U2VsZWN0UXVlcnkiLCAidXBkYXRlUXVlcnkiLCAiZ2V0VXBkYXRlUXVlcnkiLCAiZ2V0VXBkYXRlUmVmZXRjaFF1ZXJ5IiwgInVwZGF0ZUVycm9yIiwgInJlZmV0Y2hSZXN1bHQiLCAiYXJncyIsICJzY2hlbWFzIiwgInRhYmxlTmFtZSIsICJzY2hlbWEiLCAiY29sdW1uc1JlY29yZCIsICJhIiwgImIiLCAiZGF0YXR5cGUiLCAiaW5kZXhPZlBhcmVudGhlc2lzIiwgInN0cmlwcGVkRGF0YVR5cGUiLCAiTVlTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSIsICJmaWx0ZXJPcGVyYXRvcnMiLCAibW9ja0ludHJvc3BlY3QiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgIm1vY2tUaW1lem9uZVF1ZXJ5IiwgInF1ZXJ5MCIsICJxdWVyeTEiXQp9Cg==
@@ -0,0 +1,2 @@
1
+ "use strict";var m=Object.defineProperty;var Q=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var S=(e,r)=>{for(var u in r)m(e,u,{get:r[u],enumerable:!0})},h=(e,r,u,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of P(r))!b.call(e,n)&&n!==u&&m(e,n,{get:()=>r[n],enumerable:!(t=Q(r,n))||t.enumerable});return e};var v=e=>h(m({},"__esModule",{value:!0}),e);var k={};S(k,{createMySQL2Executor:()=>T});module.exports=v(k);var f=class extends Error{constructor(){super("This operation was aborted"),this.name="AbortError"}};function c(){return[new f]}function q(e){return{parameters:[e],sql:"kill ?"}}function T(e){return{async execute(r,u){let{abortSignal:t}=u||{};if(!t)try{let[o]=await e.query(r.sql,r.parameters);return[null,l(o)]}catch(o){return[o]}if(t.aborted)return c();let n,s;try{let o,a=new Promise(w=>o=w);t.addEventListener("abort",n=()=>o());let i=e.getConnection(),p=await Promise.race([i,a]);if(!p)return i.catch(()=>{}),c();if(s=p,t.aborted)return s.release(),c();let E=(s||e).query(r.sql,r.parameters),y=await Promise.race([E,a]);if(!y)return Promise.allSettled([g(e,y),E]).finally(()=>s?.release()),c();s.release();let[x]=y;return[null,l(x)]}catch(o){return s?.release(),[o]}finally{n&&t?.removeEventListener("abort",n)}},async executeSequence(r,u){let t;try{t=await e.getConnection();let[n,s]=r,[o]=await t.query(n.sql,n.parameters).catch(i=>[i]);if(o instanceof Error)return[[o]];let[a]=await t.query(s.sql,s.parameters).catch(i=>[i]);return a instanceof Error?[[null,l(o)],[a]]:[[null,l(o)],[null,l(a)]]}catch(n){return[[n]]}finally{t?.release()}}}}function l(e){return Array.isArray(e)?e:[e]}async function g(e,r){let u=q(r);try{await e.query(u.sql,u.parameters)}catch(t){console.error("Failed to cancel query:",t)}}
2
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9teXNxbDIvaW5kZXgudHMiLCAiLi4vLi4vLi4vZGF0YS9leGVjdXRvci50cyIsICIuLi8uLi8uLi9kYXRhL215c3FsLWNvcmUvdXRpbGl0eS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBQb29sLCBQb29sQ29ubmVjdGlvbiB9IGZyb20gXCJteXNxbDIvcHJvbWlzZVwiO1xuXG5pbXBvcnQgeyBnZXRBYm9ydFJlc3VsdCwgdHlwZSBTZXF1ZW5jZUV4ZWN1dG9yIH0gZnJvbSBcIi4uL2V4ZWN1dG9yXCI7XG5pbXBvcnQgeyBnZXRDYW5jZWxRdWVyeSB9IGZyb20gXCIuLi9teXNxbC1jb3JlL3V0aWxpdHlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU15U1FMMkV4ZWN1dG9yKHBvb2w6IFBvb2wpOiBTZXF1ZW5jZUV4ZWN1dG9yIHtcbiAgcmV0dXJuIHtcbiAgICBhc3luYyBleGVjdXRlKHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCB7IGFib3J0U2lnbmFsIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICBpZiAoIWFib3J0U2lnbmFsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgW3Jlc3VsdF0gPSBhd2FpdCBwb29sLnF1ZXJ5KHF1ZXJ5LnNxbCwgcXVlcnkucGFyYW1ldGVycyk7XG5cbiAgICAgICAgICByZXR1cm4gW251bGwsIGFzQXJyYXkocmVzdWx0KV0gYXMgbmV2ZXI7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgcmV0dXJuIFtlcnJvciBhcyBFcnJvcl07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGdldEFib3J0UmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBhYm9ydExpc3RlbmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgY29ubmVjdGlvbjogUG9vbENvbm5lY3Rpb24gfCB1bmRlZmluZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBhYm9ydGVkOiAoKSA9PiB2b2lkO1xuICAgICAgICBjb25zdCBhYm9ydGlvblByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gKGFib3J0ZWQgPSByZXNvbHZlKSk7XG5cbiAgICAgICAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIChhYm9ydExpc3RlbmVyID0gKCkgPT4gYWJvcnRlZCgpKSk7XG5cbiAgICAgICAgY29uc3QgY29ubmVjdGlvblByb21pc2UgPSBwb29sLmdldENvbm5lY3Rpb24oKTtcblxuICAgICAgICBjb25zdCBjb25uZWN0aW9uUmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtjb25uZWN0aW9uUHJvbWlzZSwgYWJvcnRpb25Qcm9taXNlXSk7XG5cbiAgICAgICAgaWYgKCFjb25uZWN0aW9uUmVzdWx0KSB7XG4gICAgICAgICAgdm9pZCBjb25uZWN0aW9uUHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG5cbiAgICAgICAgICByZXR1cm4gZ2V0QWJvcnRSZXN1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb25uZWN0aW9uUmVzdWx0O1xuXG4gICAgICAgIGlmIChhYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgY29ubmVjdGlvbi5yZWxlYXNlKCk7XG5cbiAgICAgICAgICByZXR1cm4gZ2V0QWJvcnRSZXN1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5UHJvbWlzZSA9IChjb25uZWN0aW9uIHx8IHBvb2wpLnF1ZXJ5KHF1ZXJ5LnNxbCwgcXVlcnkucGFyYW1ldGVycyk7XG5cbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW3F1ZXJ5UHJvbWlzZSwgYWJvcnRpb25Qcm9taXNlXSk7XG5cbiAgICAgICAgaWYgKCFxdWVyeVJlc3VsdCkge1xuICAgICAgICAgIC8vIG5vdCBpbXBvcnRhbnQgZW5vdWdoIHRvIGF3YWl0LlxuICAgICAgICAgIHZvaWQgUHJvbWlzZS5hbGxTZXR0bGVkKFtjYW5jZWxRdWVyeShwb29sLCBxdWVyeVJlc3VsdCksIHF1ZXJ5UHJvbWlzZV0pLmZpbmFsbHkoKCkgPT4gY29ubmVjdGlvbj8ucmVsZWFzZSgpKTtcblxuICAgICAgICAgIHJldHVybiBnZXRBYm9ydFJlc3VsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29ubmVjdGlvbi5yZWxlYXNlKCk7XG5cbiAgICAgICAgY29uc3QgW3Jlc3VsdF0gPSBxdWVyeVJlc3VsdDtcblxuICAgICAgICByZXR1cm4gW251bGwsIGFzQXJyYXkocmVzdWx0KV0gYXMgbmV2ZXI7XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25uZWN0aW9uPy5yZWxlYXNlKCk7XG5cbiAgICAgICAgcmV0dXJuIFtlcnJvciBhcyBFcnJvcl07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoYWJvcnRMaXN0ZW5lcikge1xuICAgICAgICAgIGFib3J0U2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRMaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogYWJvcnQgc2lnbmFsIGhhbmRsaW5nXG4gICAgLy8gVE9ETzogdHJhbnNhY3Rpb24/XG4gICAgYXN5bmMgZXhlY3V0ZVNlcXVlbmNlKHNlcXVlbmNlLCBfb3B0aW9ucykge1xuICAgICAgbGV0IGNvbm5lY3Rpb246IFBvb2xDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25uZWN0aW9uID0gYXdhaXQgcG9vbC5nZXRDb25uZWN0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgW3F1ZXJ5MCwgcXVlcnkxXSA9IHNlcXVlbmNlO1xuXG4gICAgICAgIGNvbnN0IFtyZXN1bHQwXSA9IGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkocXVlcnkwLnNxbCwgcXVlcnkwLnBhcmFtZXRlcnMpLmNhdGNoKChlcnJvcikgPT4gW2Vycm9yIGFzIEVycm9yXSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdDAgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBbW3Jlc3VsdDBdXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtyZXN1bHQxXSA9IGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkocXVlcnkxLnNxbCwgcXVlcnkxLnBhcmFtZXRlcnMpLmNhdGNoKChlcnJvcikgPT4gW2Vycm9yIGFzIEVycm9yXSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdDEgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBbW251bGwsIGFzQXJyYXkocmVzdWx0MCldLCBbcmVzdWx0MV1dIGFzIG5ldmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBbbnVsbCwgYXNBcnJheShyZXN1bHQwKV0sXG4gICAgICAgICAgW251bGwsIGFzQXJyYXkocmVzdWx0MSldLFxuICAgICAgICBdIGFzIG5ldmVyO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIFtbZXJyb3IgYXMgRXJyb3JdXTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbm5lY3Rpb24/LnJlbGVhc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gYXNBcnJheTxUPih2YWx1ZTogVCk6IFQgZXh0ZW5kcyBhbnlbXSA/IFQgOiBUW10ge1xuICByZXR1cm4gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKSBhcyBuZXZlcjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2FuY2VsUXVlcnkocG9vbDogUG9vbCwgdGhyZWFkSWQ6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcXVlcnkgPSBnZXRDYW5jZWxRdWVyeSh0aHJlYWRJZCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwb29sLnF1ZXJ5KHF1ZXJ5LnNxbCwgcXVlcnkucGFyYW1ldGVycyk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjYW5jZWwgcXVlcnk6XCIsIGVycm9yKTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4vdHlwZS11dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dG9yIHtcbiAgZXhlY3V0ZTxUPihxdWVyeTogUXVlcnk8VD4sIG9wdGlvbnM/OiBFeGVjdXRlT3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEVycm9yLCBRdWVyeVJlc3VsdDxRdWVyeTxUPj4+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXF1ZW5jZUV4ZWN1dG9yIGV4dGVuZHMgRXhlY3V0b3Ige1xuICBleGVjdXRlU2VxdWVuY2U8VCwgUz4oXG4gICAgc2VxdWVuY2U6IHJlYWRvbmx5IFtRdWVyeTxUPiwgUXVlcnk8Uz5dLFxuICAgIG9wdGlvbnM/OiBFeGVjdXRlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxbW0Vycm9yXV0gfCBbW251bGwsIFF1ZXJ5UmVzdWx0PFF1ZXJ5PFQ+Pl0sIEVpdGhlcjxFcnJvciwgUXVlcnlSZXN1bHQ8UXVlcnk8Uz4+Pl0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGVPcHRpb25zIHtcbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIEFib3J0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiVGhpcyBvcGVyYXRpb24gd2FzIGFib3J0ZWRcIik7XG4gICAgdGhpcy5uYW1lID0gXCJBYm9ydEVycm9yXCI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFib3J0UmVzdWx0KCk6IFtBYm9ydEVycm9yXSB7XG4gIHJldHVybiBbbmV3IEFib3J0RXJyb3IoKV07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBRdWVyeSB9IGZyb20gXCIuLi9xdWVyeVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FuY2VsUXVlcnkodGhyZWFkSWQ6IHVua25vd24pOiBRdWVyeTx1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgcGFyYW1ldGVyczogW3RocmVhZElkXSxcbiAgICBzcWw6IFwia2lsbCA/XCIsXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAieWFBQUEsSUFBQUEsRUFBQSxHQUFBQyxFQUFBRCxFQUFBLDBCQUFBRSxJQUFBLGVBQUFDLEVBQUFILEdDa0JPLElBQU1JLEVBQU4sY0FBeUIsS0FBTSxDQUNwQyxhQUFjLENBQ1osTUFBTSw0QkFBNEIsRUFDbEMsS0FBSyxLQUFPLFlBQ2QsQ0FDRixFQUVPLFNBQVNDLEdBQStCLENBQzdDLE1BQU8sQ0FBQyxJQUFJRCxDQUFZLENBQzFCLENDekJPLFNBQVNFLEVBQWVDLEVBQW1DLENBQ2hFLE1BQU8sQ0FDTCxXQUFZLENBQUNBLENBQVEsRUFDckIsSUFBSyxRQUNQLENBQ0YsQ0ZGTyxTQUFTQyxFQUFxQkMsRUFBOEIsQ0FDakUsTUFBTyxDQUNMLE1BQU0sUUFBUUMsRUFBT0MsRUFBUyxDQUM1QixHQUFNLENBQUUsWUFBQUMsQ0FBWSxFQUFJRCxHQUFXLENBQUMsRUFFcEMsR0FBSSxDQUFDQyxFQUNILEdBQUksQ0FDRixHQUFNLENBQUNDLENBQU0sRUFBSSxNQUFNSixFQUFLLE1BQU1DLEVBQU0sSUFBS0EsRUFBTSxVQUFVLEVBRTdELE1BQU8sQ0FBQyxLQUFNSSxFQUFRRCxDQUFNLENBQUMsQ0FDL0IsT0FBU0UsRUFBZ0IsQ0FDdkIsTUFBTyxDQUFDQSxDQUFjLENBQ3hCLENBR0YsR0FBSUgsRUFBWSxRQUNkLE9BQU9JLEVBQWUsRUFHeEIsSUFBSUMsRUFDQUMsRUFFSixHQUFJLENBQ0YsSUFBSUMsRUFDRUMsRUFBa0IsSUFBSSxRQUFlQyxHQUFhRixFQUFVRSxDQUFRLEVBRTFFVCxFQUFZLGlCQUFpQixRQUFVSyxFQUFnQixJQUFNRSxFQUFRLENBQUUsRUFFdkUsSUFBTUcsRUFBb0JiLEVBQUssY0FBYyxFQUV2Q2MsRUFBbUIsTUFBTSxRQUFRLEtBQUssQ0FBQ0QsRUFBbUJGLENBQWUsQ0FBQyxFQUVoRixHQUFJLENBQUNHLEVBQ0gsT0FBS0QsRUFBa0IsTUFBTSxJQUFNLENBQUMsQ0FBQyxFQUU5Qk4sRUFBZSxFQUt4QixHQUZBRSxFQUFhSyxFQUVUWCxFQUFZLFFBQ2QsT0FBQU0sRUFBVyxRQUFRLEVBRVpGLEVBQWUsRUFHeEIsSUFBTVEsR0FBZ0JOLEdBQWNULEdBQU0sTUFBTUMsRUFBTSxJQUFLQSxFQUFNLFVBQVUsRUFFckVlLEVBQWMsTUFBTSxRQUFRLEtBQUssQ0FBQ0QsRUFBY0osQ0FBZSxDQUFDLEVBRXRFLEdBQUksQ0FBQ0ssRUFFSCxPQUFLLFFBQVEsV0FBVyxDQUFDQyxFQUFZakIsRUFBTWdCLENBQVcsRUFBR0QsQ0FBWSxDQUFDLEVBQUUsUUFBUSxJQUFNTixHQUFZLFFBQVEsQ0FBQyxFQUVwR0YsRUFBZSxFQUd4QkUsRUFBVyxRQUFRLEVBRW5CLEdBQU0sQ0FBQ0wsQ0FBTSxFQUFJWSxFQUVqQixNQUFPLENBQUMsS0FBTVgsRUFBUUQsQ0FBTSxDQUFDLENBQy9CLE9BQVNFLEVBQWdCLENBQ3ZCLE9BQUFHLEdBQVksUUFBUSxFQUViLENBQUNILENBQWMsQ0FDeEIsUUFBRSxDQUNJRSxHQUNGTCxHQUFhLG9CQUFvQixRQUFTSyxDQUFhLENBRTNELENBQ0YsRUFJQSxNQUFNLGdCQUFnQlUsRUFBVUMsRUFBVSxDQUN4QyxJQUFJVixFQUVKLEdBQUksQ0FDRkEsRUFBYSxNQUFNVCxFQUFLLGNBQWMsRUFFdEMsR0FBTSxDQUFDb0IsRUFBUUMsQ0FBTSxFQUFJSCxFQUVuQixDQUFDSSxDQUFPLEVBQUksTUFBTWIsRUFBVyxNQUFNVyxFQUFPLElBQUtBLEVBQU8sVUFBVSxFQUFFLE1BQU9kLEdBQVUsQ0FBQ0EsQ0FBYyxDQUFDLEVBRXpHLEdBQUlnQixhQUFtQixNQUNyQixNQUFPLENBQUMsQ0FBQ0EsQ0FBTyxDQUFDLEVBR25CLEdBQU0sQ0FBQ0MsQ0FBTyxFQUFJLE1BQU1kLEVBQVcsTUFBTVksRUFBTyxJQUFLQSxFQUFPLFVBQVUsRUFBRSxNQUFPZixHQUFVLENBQUNBLENBQWMsQ0FBQyxFQUV6RyxPQUFJaUIsYUFBbUIsTUFDZCxDQUFDLENBQUMsS0FBTWxCLEVBQVFpQixDQUFPLENBQUMsRUFBRyxDQUFDQyxDQUFPLENBQUMsRUFHdEMsQ0FDTCxDQUFDLEtBQU1sQixFQUFRaUIsQ0FBTyxDQUFDLEVBQ3ZCLENBQUMsS0FBTWpCLEVBQVFrQixDQUFPLENBQUMsQ0FDekIsQ0FDRixPQUFTakIsRUFBZ0IsQ0FDdkIsTUFBTyxDQUFDLENBQUNBLENBQWMsQ0FBQyxDQUMxQixRQUFFLENBQ0FHLEdBQVksUUFBUSxDQUN0QixDQUNGLENBQ0YsQ0FDRixDQUdBLFNBQVNKLEVBQVdtQixFQUFxQyxDQUN2RCxPQUFRLE1BQU0sUUFBUUEsQ0FBSyxFQUFJQSxFQUFRLENBQUNBLENBQUssQ0FDL0MsQ0FFQSxlQUFlUCxFQUFZakIsRUFBWXlCLEVBQWtDLENBQ3ZFLElBQU14QixFQUFReUIsRUFBZUQsQ0FBUSxFQUVyQyxHQUFJLENBQ0YsTUFBTXpCLEVBQUssTUFBTUMsRUFBTSxJQUFLQSxFQUFNLFVBQVUsQ0FDOUMsT0FBU0ssRUFBZ0IsQ0FDdkIsUUFBUSxNQUFNLDBCQUEyQkEsQ0FBSyxDQUNoRCxDQUNGIiwKICAibmFtZXMiOiBbIm15c3FsMl9leHBvcnRzIiwgIl9fZXhwb3J0IiwgImNyZWF0ZU15U1FMMkV4ZWN1dG9yIiwgIl9fdG9Db21tb25KUyIsICJBYm9ydEVycm9yIiwgImdldEFib3J0UmVzdWx0IiwgImdldENhbmNlbFF1ZXJ5IiwgInRocmVhZElkIiwgImNyZWF0ZU15U1FMMkV4ZWN1dG9yIiwgInBvb2wiLCAicXVlcnkiLCAib3B0aW9ucyIsICJhYm9ydFNpZ25hbCIsICJyZXN1bHQiLCAiYXNBcnJheSIsICJlcnJvciIsICJnZXRBYm9ydFJlc3VsdCIsICJhYm9ydExpc3RlbmVyIiwgImNvbm5lY3Rpb24iLCAiYWJvcnRlZCIsICJhYm9ydGlvblByb21pc2UiLCAicmVzb2x2ZSIsICJjb25uZWN0aW9uUHJvbWlzZSIsICJjb25uZWN0aW9uUmVzdWx0IiwgInF1ZXJ5UHJvbWlzZSIsICJxdWVyeVJlc3VsdCIsICJjYW5jZWxRdWVyeSIsICJzZXF1ZW5jZSIsICJfb3B0aW9ucyIsICJxdWVyeTAiLCAicXVlcnkxIiwgInJlc3VsdDAiLCAicmVzdWx0MSIsICJ2YWx1ZSIsICJ0aHJlYWRJZCIsICJnZXRDYW5jZWxRdWVyeSJdCn0K
@@ -0,0 +1,7 @@
1
+ import { Pool } from 'mysql2/promise';
2
+ import { S as SequenceExecutor } from '../../index-BhPjNuvP.cjs';
3
+ import 'kysely';
4
+
5
+ declare function createMySQL2Executor(pool: Pool): SequenceExecutor;
6
+
7
+ export { createMySQL2Executor };
@@ -0,0 +1,7 @@
1
+ import { Pool } from 'mysql2/promise';
2
+ import { S as SequenceExecutor } from '../../index-BhPjNuvP.js';
3
+ import 'kysely';
4
+
5
+ declare function createMySQL2Executor(pool: Pool): SequenceExecutor;
6
+
7
+ export { createMySQL2Executor };
@@ -0,0 +1,10 @@
1
+ import * as ___react___ from 'react';
2
+ import * as ___react_dom___ from 'react-dom';
3
+
4
+ function require(mod) {
5
+ if (mod === 'react') return ___react___;
6
+ if (mod === 'react-dom') return ___react_dom___;
7
+ throw new Error(`Unknown module ${mod}`);
8
+ }
9
+ import{a as q}from"../../chunk-ZUEQ555M.js";import{b as u}from"../../chunk-SXTJF4PD.js";import{e as d}from"../../chunk-GDQBQ7MK.js";d();function h(n){return{async execute(o,i){let{abortSignal:r}=i||{};if(!r)try{let[e]=await n.query(o.sql,o.parameters);return[null,l(e)]}catch(e){return[e]}if(r.aborted)return u();let a,t;try{let e,s=new Promise(w=>e=w);r.addEventListener("abort",a=()=>e());let c=n.getConnection(),f=await Promise.race([c,s]);if(!f)return c.catch(()=>{}),u();if(t=f,r.aborted)return t.release(),u();let m=(t||n).query(o.sql,o.parameters),y=await Promise.race([m,s]);if(!y)return Promise.allSettled([v(n,y),m]).finally(()=>t?.release()),u();t.release();let[P]=y;return[null,l(P)]}catch(e){return t?.release(),[e]}finally{a&&r?.removeEventListener("abort",a)}},async executeSequence(o,i){let r;try{r=await n.getConnection();let[a,t]=o,[e]=await r.query(a.sql,a.parameters).catch(c=>[c]);if(e instanceof Error)return[[e]];let[s]=await r.query(t.sql,t.parameters).catch(c=>[c]);return s instanceof Error?[[null,l(e)],[s]]:[[null,l(e)],[null,l(s)]]}catch(a){return[[a]]}finally{r?.release()}}}}function l(n){return Array.isArray(n)?n:[n]}async function v(n,o){let i=q(o);try{await n.query(i.sql,i.parameters)}catch(r){console.error("Failed to cancel query:",r)}}export{h as createMySQL2Executor};
10
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9teXNxbDIvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB0eXBlIHsgUG9vbCwgUG9vbENvbm5lY3Rpb24gfSBmcm9tIFwibXlzcWwyL3Byb21pc2VcIjtcblxuaW1wb3J0IHsgZ2V0QWJvcnRSZXN1bHQsIHR5cGUgU2VxdWVuY2VFeGVjdXRvciB9IGZyb20gXCIuLi9leGVjdXRvclwiO1xuaW1wb3J0IHsgZ2V0Q2FuY2VsUXVlcnkgfSBmcm9tIFwiLi4vbXlzcWwtY29yZS91dGlsaXR5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNeVNRTDJFeGVjdXRvcihwb29sOiBQb29sKTogU2VxdWVuY2VFeGVjdXRvciB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgZXhlY3V0ZShxdWVyeSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgeyBhYm9ydFNpZ25hbCB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgaWYgKCFhYm9ydFNpZ25hbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IFtyZXN1bHRdID0gYXdhaXQgcG9vbC5xdWVyeShxdWVyeS5zcWwsIHF1ZXJ5LnBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgcmV0dXJuIFtudWxsLCBhc0FycmF5KHJlc3VsdCldIGFzIG5ldmVyO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgIHJldHVybiBbZXJyb3IgYXMgRXJyb3JdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybiBnZXRBYm9ydFJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgYWJvcnRMaXN0ZW5lcjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IGNvbm5lY3Rpb246IFBvb2xDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICBsZXQgYWJvcnRlZDogKCkgPT4gdm9pZDtcbiAgICAgICAgY29uc3QgYWJvcnRpb25Qcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IChhYm9ydGVkID0gcmVzb2x2ZSkpO1xuXG4gICAgICAgIGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoYWJvcnRMaXN0ZW5lciA9ICgpID0+IGFib3J0ZWQoKSkpO1xuXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm9taXNlID0gcG9vbC5nZXRDb25uZWN0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgY29ubmVjdGlvblJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbY29ubmVjdGlvblByb21pc2UsIGFib3J0aW9uUHJvbWlzZV0pO1xuXG4gICAgICAgIGlmICghY29ubmVjdGlvblJlc3VsdCkge1xuICAgICAgICAgIHZvaWQgY29ubmVjdGlvblByb21pc2UuY2F0Y2goKCkgPT4ge30pO1xuXG4gICAgICAgICAgcmV0dXJuIGdldEFib3J0UmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25uZWN0aW9uID0gY29ubmVjdGlvblJlc3VsdDtcblxuICAgICAgICBpZiAoYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgIGNvbm5lY3Rpb24ucmVsZWFzZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIGdldEFib3J0UmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdWVyeVByb21pc2UgPSAoY29ubmVjdGlvbiB8fCBwb29sKS5xdWVyeShxdWVyeS5zcWwsIHF1ZXJ5LnBhcmFtZXRlcnMpO1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5UmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtxdWVyeVByb21pc2UsIGFib3J0aW9uUHJvbWlzZV0pO1xuXG4gICAgICAgIGlmICghcXVlcnlSZXN1bHQpIHtcbiAgICAgICAgICAvLyBub3QgaW1wb3J0YW50IGVub3VnaCB0byBhd2FpdC5cbiAgICAgICAgICB2b2lkIFByb21pc2UuYWxsU2V0dGxlZChbY2FuY2VsUXVlcnkocG9vbCwgcXVlcnlSZXN1bHQpLCBxdWVyeVByb21pc2VdKS5maW5hbGx5KCgpID0+IGNvbm5lY3Rpb24/LnJlbGVhc2UoKSk7XG5cbiAgICAgICAgICByZXR1cm4gZ2V0QWJvcnRSZXN1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbm5lY3Rpb24ucmVsZWFzZSgpO1xuXG4gICAgICAgIGNvbnN0IFtyZXN1bHRdID0gcXVlcnlSZXN1bHQ7XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCBhc0FycmF5KHJlc3VsdCldIGFzIG5ldmVyO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgY29ubmVjdGlvbj8ucmVsZWFzZSgpO1xuXG4gICAgICAgIHJldHVybiBbZXJyb3IgYXMgRXJyb3JdO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGFib3J0TGlzdGVuZXIpIHtcbiAgICAgICAgICBhYm9ydFNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGFib3J0IHNpZ25hbCBoYW5kbGluZ1xuICAgIC8vIFRPRE86IHRyYW5zYWN0aW9uP1xuICAgIGFzeW5jIGV4ZWN1dGVTZXF1ZW5jZShzZXF1ZW5jZSwgX29wdGlvbnMpIHtcbiAgICAgIGxldCBjb25uZWN0aW9uOiBQb29sQ29ubmVjdGlvbiB8IHVuZGVmaW5lZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29ubmVjdGlvbiA9IGF3YWl0IHBvb2wuZ2V0Q29ubmVjdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IFtxdWVyeTAsIHF1ZXJ5MV0gPSBzZXF1ZW5jZTtcblxuICAgICAgICBjb25zdCBbcmVzdWx0MF0gPSBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KHF1ZXJ5MC5zcWwsIHF1ZXJ5MC5wYXJhbWV0ZXJzKS5jYXRjaCgoZXJyb3IpID0+IFtlcnJvciBhcyBFcnJvcl0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQwIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gW1tyZXN1bHQwXV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcmVzdWx0MV0gPSBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KHF1ZXJ5MS5zcWwsIHF1ZXJ5MS5wYXJhbWV0ZXJzKS5jYXRjaCgoZXJyb3IpID0+IFtlcnJvciBhcyBFcnJvcl0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQxIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gW1tudWxsLCBhc0FycmF5KHJlc3VsdDApXSwgW3Jlc3VsdDFdXSBhcyBuZXZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgW251bGwsIGFzQXJyYXkocmVzdWx0MCldLFxuICAgICAgICAgIFtudWxsLCBhc0FycmF5KHJlc3VsdDEpXSxcbiAgICAgICAgXSBhcyBuZXZlcjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIHJldHVybiBbW2Vycm9yIGFzIEVycm9yXV07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjb25uZWN0aW9uPy5yZWxlYXNlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGFzQXJyYXk8VD4odmFsdWU6IFQpOiBUIGV4dGVuZHMgYW55W10gPyBUIDogVFtdIHtcbiAgcmV0dXJuIChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSkgYXMgbmV2ZXI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbmNlbFF1ZXJ5KHBvb2w6IFBvb2wsIHRocmVhZElkOiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHF1ZXJ5ID0gZ2V0Q2FuY2VsUXVlcnkodGhyZWFkSWQpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgcG9vbC5xdWVyeShxdWVyeS5zcWwsIHF1ZXJ5LnBhcmFtZXRlcnMpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY2FuY2VsIHF1ZXJ5OlwiLCBlcnJvcik7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7O29JQUFBQSxJQUtPLFNBQVNDLEVBQXFCQyxFQUE4QixDQUNqRSxNQUFPLENBQ0wsTUFBTSxRQUFRQyxFQUFPQyxFQUFTLENBQzVCLEdBQU0sQ0FBRSxZQUFBQyxDQUFZLEVBQUlELEdBQVcsQ0FBQyxFQUVwQyxHQUFJLENBQUNDLEVBQ0gsR0FBSSxDQUNGLEdBQU0sQ0FBQ0MsQ0FBTSxFQUFJLE1BQU1KLEVBQUssTUFBTUMsRUFBTSxJQUFLQSxFQUFNLFVBQVUsRUFFN0QsTUFBTyxDQUFDLEtBQU1JLEVBQVFELENBQU0sQ0FBQyxDQUMvQixPQUFTRSxFQUFnQixDQUN2QixNQUFPLENBQUNBLENBQWMsQ0FDeEIsQ0FHRixHQUFJSCxFQUFZLFFBQ2QsT0FBT0ksRUFBZSxFQUd4QixJQUFJQyxFQUNBQyxFQUVKLEdBQUksQ0FDRixJQUFJQyxFQUNFQyxFQUFrQixJQUFJLFFBQWVDLEdBQWFGLEVBQVVFLENBQVEsRUFFMUVULEVBQVksaUJBQWlCLFFBQVVLLEVBQWdCLElBQU1FLEVBQVEsQ0FBRSxFQUV2RSxJQUFNRyxFQUFvQmIsRUFBSyxjQUFjLEVBRXZDYyxFQUFtQixNQUFNLFFBQVEsS0FBSyxDQUFDRCxFQUFtQkYsQ0FBZSxDQUFDLEVBRWhGLEdBQUksQ0FBQ0csRUFDSCxPQUFLRCxFQUFrQixNQUFNLElBQU0sQ0FBQyxDQUFDLEVBRTlCTixFQUFlLEVBS3hCLEdBRkFFLEVBQWFLLEVBRVRYLEVBQVksUUFDZCxPQUFBTSxFQUFXLFFBQVEsRUFFWkYsRUFBZSxFQUd4QixJQUFNUSxHQUFnQk4sR0FBY1QsR0FBTSxNQUFNQyxFQUFNLElBQUtBLEVBQU0sVUFBVSxFQUVyRWUsRUFBYyxNQUFNLFFBQVEsS0FBSyxDQUFDRCxFQUFjSixDQUFlLENBQUMsRUFFdEUsR0FBSSxDQUFDSyxFQUVILE9BQUssUUFBUSxXQUFXLENBQUNDLEVBQVlqQixFQUFNZ0IsQ0FBVyxFQUFHRCxDQUFZLENBQUMsRUFBRSxRQUFRLElBQU1OLEdBQVksUUFBUSxDQUFDLEVBRXBHRixFQUFlLEVBR3hCRSxFQUFXLFFBQVEsRUFFbkIsR0FBTSxDQUFDTCxDQUFNLEVBQUlZLEVBRWpCLE1BQU8sQ0FBQyxLQUFNWCxFQUFRRCxDQUFNLENBQUMsQ0FDL0IsT0FBU0UsRUFBZ0IsQ0FDdkIsT0FBQUcsR0FBWSxRQUFRLEVBRWIsQ0FBQ0gsQ0FBYyxDQUN4QixRQUFFLENBQ0lFLEdBQ0ZMLEdBQWEsb0JBQW9CLFFBQVNLLENBQWEsQ0FFM0QsQ0FDRixFQUlBLE1BQU0sZ0JBQWdCVSxFQUFVQyxFQUFVLENBQ3hDLElBQUlWLEVBRUosR0FBSSxDQUNGQSxFQUFhLE1BQU1ULEVBQUssY0FBYyxFQUV0QyxHQUFNLENBQUNvQixFQUFRQyxDQUFNLEVBQUlILEVBRW5CLENBQUNJLENBQU8sRUFBSSxNQUFNYixFQUFXLE1BQU1XLEVBQU8sSUFBS0EsRUFBTyxVQUFVLEVBQUUsTUFBT2QsR0FBVSxDQUFDQSxDQUFjLENBQUMsRUFFekcsR0FBSWdCLGFBQW1CLE1BQ3JCLE1BQU8sQ0FBQyxDQUFDQSxDQUFPLENBQUMsRUFHbkIsR0FBTSxDQUFDQyxDQUFPLEVBQUksTUFBTWQsRUFBVyxNQUFNWSxFQUFPLElBQUtBLEVBQU8sVUFBVSxFQUFFLE1BQU9mLEdBQVUsQ0FBQ0EsQ0FBYyxDQUFDLEVBRXpHLE9BQUlpQixhQUFtQixNQUNkLENBQUMsQ0FBQyxLQUFNbEIsRUFBUWlCLENBQU8sQ0FBQyxFQUFHLENBQUNDLENBQU8sQ0FBQyxFQUd0QyxDQUNMLENBQUMsS0FBTWxCLEVBQVFpQixDQUFPLENBQUMsRUFDdkIsQ0FBQyxLQUFNakIsRUFBUWtCLENBQU8sQ0FBQyxDQUN6QixDQUNGLE9BQVNqQixFQUFnQixDQUN2QixNQUFPLENBQUMsQ0FBQ0EsQ0FBYyxDQUFDLENBQzFCLFFBQUUsQ0FDQUcsR0FBWSxRQUFRLENBQ3RCLENBQ0YsQ0FDRixDQUNGLENBR0EsU0FBU0osRUFBV21CLEVBQXFDLENBQ3ZELE9BQVEsTUFBTSxRQUFRQSxDQUFLLEVBQUlBLEVBQVEsQ0FBQ0EsQ0FBSyxDQUMvQyxDQUVBLGVBQWVQLEVBQVlqQixFQUFZeUIsRUFBa0MsQ0FDdkUsSUFBTXhCLEVBQVF5QixFQUFlRCxDQUFRLEVBRXJDLEdBQUksQ0FDRixNQUFNekIsRUFBSyxNQUFNQyxFQUFNLElBQUtBLEVBQU0sVUFBVSxDQUM5QyxPQUFTSyxFQUFnQixDQUN2QixRQUFRLE1BQU0sMEJBQTJCQSxDQUFLLENBQ2hELENBQ0YiLAogICJuYW1lcyI6IFsiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiY3JlYXRlTXlTUUwyRXhlY3V0b3IiLCAicG9vbCIsICJxdWVyeSIsICJvcHRpb25zIiwgImFib3J0U2lnbmFsIiwgInJlc3VsdCIsICJhc0FycmF5IiwgImVycm9yIiwgImdldEFib3J0UmVzdWx0IiwgImFib3J0TGlzdGVuZXIiLCAiY29ubmVjdGlvbiIsICJhYm9ydGVkIiwgImFib3J0aW9uUHJvbWlzZSIsICJyZXNvbHZlIiwgImNvbm5lY3Rpb25Qcm9taXNlIiwgImNvbm5lY3Rpb25SZXN1bHQiLCAicXVlcnlQcm9taXNlIiwgInF1ZXJ5UmVzdWx0IiwgImNhbmNlbFF1ZXJ5IiwgInNlcXVlbmNlIiwgIl9vcHRpb25zIiwgInF1ZXJ5MCIsICJxdWVyeTEiLCAicmVzdWx0MCIsICJyZXN1bHQxIiwgInZhbHVlIiwgInRocmVhZElkIiwgImdldENhbmNlbFF1ZXJ5Il0KfQo=