@prisma/studio-core-licensed 0.0.0-dev.202511180230 → 0.0.0-dev.202511180241

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.
@@ -1,9 +1,14 @@
1
- import { d as AdapterRequirements, A as Adapter, B as BuilderRequirements, Q as Query, c as QueryResult } from '../../index-2horhMcs.cjs';
1
+ import { d as AdapterRequirements, A as Adapter, f as AdapterDeleteDetails, B as BuilderRequirements, g as AdapterInsertDetails, e as AdapterQueryDetails, h as AdapterUpdateDetails, Q as Query, c as QueryResult } from '../../index-2horhMcs.cjs';
2
2
  import * as kysely from 'kysely';
3
3
 
4
4
  type MySQLAdapterRequirements = AdapterRequirements;
5
5
  declare function createMySQLAdapter(requirements: MySQLAdapterRequirements): Adapter;
6
6
 
7
+ declare function getDeleteQuery(_details: AdapterDeleteDetails, _requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): void;
8
+ declare function getInsertQuery(_details: AdapterInsertDetails, _requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): void;
9
+ declare function getSelectQuery(_details: AdapterQueryDetails, _requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): void;
10
+ declare function getUpdateQuery(_details: AdapterUpdateDetails, _requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): void;
11
+
7
12
  declare function getTablesQuery(requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
8
13
  name: string;
9
14
  schema: string;
@@ -28,4 +33,4 @@ declare function mockTimezoneQuery(): QueryResult<typeof getTimezoneQuery>;
28
33
 
29
34
  declare function getCancelQuery(threadId: unknown): Query<unknown>;
30
35
 
31
- export { type MySQLAdapterRequirements, createMySQLAdapter, getCancelQuery, getTablesQuery, getTimezoneQuery, mockTablesQuery, mockTimezoneQuery };
36
+ export { type MySQLAdapterRequirements, createMySQLAdapter, getCancelQuery, getDeleteQuery, getInsertQuery, getSelectQuery, getTablesQuery, getTimezoneQuery, getUpdateQuery, mockTablesQuery, mockTimezoneQuery };
@@ -1,9 +1,14 @@
1
- import { d as AdapterRequirements, A as Adapter, B as BuilderRequirements, Q as Query, c as QueryResult } from '../../index-2horhMcs.js';
1
+ import { d as AdapterRequirements, A as Adapter, f as AdapterDeleteDetails, B as BuilderRequirements, g as AdapterInsertDetails, e as AdapterQueryDetails, h as AdapterUpdateDetails, Q as Query, c as QueryResult } from '../../index-2horhMcs.js';
2
2
  import * as kysely from 'kysely';
3
3
 
4
4
  type MySQLAdapterRequirements = AdapterRequirements;
5
5
  declare function createMySQLAdapter(requirements: MySQLAdapterRequirements): Adapter;
6
6
 
7
+ declare function getDeleteQuery(_details: AdapterDeleteDetails, _requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): void;
8
+ declare function getInsertQuery(_details: AdapterInsertDetails, _requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): void;
9
+ declare function getSelectQuery(_details: AdapterQueryDetails, _requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): void;
10
+ declare function getUpdateQuery(_details: AdapterUpdateDetails, _requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): void;
11
+
7
12
  declare function getTablesQuery(requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
8
13
  name: string;
9
14
  schema: string;
@@ -28,4 +33,4 @@ declare function mockTimezoneQuery(): QueryResult<typeof getTimezoneQuery>;
28
33
 
29
34
  declare function getCancelQuery(threadId: unknown): Query<unknown>;
30
35
 
31
- export { type MySQLAdapterRequirements, createMySQLAdapter, getCancelQuery, getTablesQuery, getTimezoneQuery, mockTablesQuery, mockTimezoneQuery };
36
+ export { type MySQLAdapterRequirements, createMySQLAdapter, getCancelQuery, getDeleteQuery, getInsertQuery, getSelectQuery, getTablesQuery, getTimezoneQuery, getUpdateQuery, mockTablesQuery, mockTimezoneQuery };
@@ -6,5 +6,5 @@ function require(mod) {
6
6
  if (mod === 'react-dom') return ___react_dom___;
7
7
  throw new Error(`Unknown module ${mod}`);
8
8
  }
9
- import{a as S}from"../../chunk-32BUC7NR.js";import{a as w}from"../../chunk-ZUEQ555M.js";import{a as c}from"../../chunk-OTK4ZF2W.js";import{i as u,n as b,o as M,p as L,r as T}from"../../chunk-A6CVKSUD.js";import{e as n}from"../../chunk-GDQBQ7MK.js";n();n();n();var B={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"}};n();n();function C(e){return u`(select cast(coalesce(json_arrayagg(json_object(${u.join(I(e.toOperationNode(),"agg"))})), '[]') as json) from ${e} as agg)`}function I(e,o){try{return S(e,o)}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.")}}n();function f(e){return L({...e,Adapter:M,QueryCompiler:b})}function O(e){return T(f(e).selectFrom("information_schema.tables as t").where("t.TABLE_SCHEMA","=",u`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(o=>C(o.selectFrom("information_schema.columns as c").leftJoin("information_schema.KEY_COLUMN_USAGE as kcu",t=>t.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(t=>[t("c.EXTRA","=","auto_increment").as("autoincrement"),t("c.EXTRA","in",["on update CURRENT_TIMESTAMP","STORED GENERATED","VIRTUAL GENERATED"]).as("computed"),t("c.COLUMN_KEY","=","PRI").as("pk"),t("c.IS_NULLABLE","=","YES").as("nullable")])).as("columns")).orderBy("t.TABLE_SCHEMA").orderBy("t.TABLE_NAME").orderBy("t.TABLE_TYPE"))}function V(){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 h(e){let o=f(e),t=u`@@session.time_zone`;return T(o.selectNoFrom(o.case().when(t,"=","SYSTEM").then(u`@@system_time_zone`).else(t).end().as("timezone")).$narrowType())}function W(){return[{timezone:"UTC"}]}function re(e){let{executor:o,...t}=e;return{delete(a,r){throw new Error("Method not implemented.")},insert(a,r){throw new Error("Method not implemented.")},async introspect(a){try{let r=O(e),p=h(e),[[l,d],[m,i]]=await Promise.all([o.execute(r,a),o.execute(p,a)]);if(l)return c({error:l,query:r});if(m)return c({error:m,query:p});let A=i[0]?.timezone;return A?[null,k({query:r,tables:d,timezone:A})]:c({error:new Error("Timezone not found"),query:p})}catch(r){return c({error:r})}},query(a,r){throw new Error("Method not implemented.")},update(a,r){throw new Error("Method not implemented.")}}}function k(e){let{query:o,tables:t,timezone:a}=e;return t.reduce((r,p)=>{let{schemas:l}=r,{columns:d,name:m,schema:i}=p,A=d.sort((_,s)=>_.position-s.position).reduce((_,s)=>{let{datatype:g,name:N}=s,R=g.indexOf("("),y=(R>-1?g.substring(0,R):g).trim().toLowerCase();return{..._,[N]:{datatype:{...B[y]||{group:"raw"},isArray:!1,isNative:!0,name:y,options:y==="enum"?g.slice(6,-2).split("','"):[],schema:i},fkColumn:s.fk_column,fkSchema:i,fkTable:s.fk_table,isComputed:!!s.computed,isInPrimaryKey:!!s.pk,name:N,nullable:!!s.nullable,schema:i,table:m}}},{});return l[i]===void 0&&(l[i]={name:i,tables:{}}),l[i].tables[m]={columns:A,name:m,schema:i},r},{filterOperators:Q,query:o,schemas:{},timezone:a})}var Q=["=","!=",">",">=","<","<=","is","is not","like","not like"];export{re as createMySQLAdapter,w as getCancelQuery,O as getTablesQuery,h as getTimezoneQuery,V as mockTablesQuery,W as mockTimezoneQuery};
10
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9teXNxbC1jb3JlL2luZGV4LnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9hZGFwdGVyLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL215c3FsLWNvcmUvaW50cm9zcGVjdGlvbi50cyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2hlbHBlcnMvbXlzcWwuanMiLCAiLi4vLi4vLi4vZGF0YS9teXNxbC1jb3JlL2J1aWxkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2ludHJvc3BlY3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxpdHlcIjtcbiIsICJpbXBvcnQge1xuICB0eXBlIEFkYXB0ZXIsXG4gIHR5cGUgQWRhcHRlckRlbGV0ZVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyRXJyb3IsXG4gIHR5cGUgQWRhcHRlckluc2VydFJlc3VsdCxcbiAgdHlwZSBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyUXVlcnlSZXN1bHQsXG4gIHR5cGUgQWRhcHRlclJlcXVpcmVtZW50cyxcbiAgdHlwZSBBZGFwdGVyVXBkYXRlUmVzdWx0LFxuICB0eXBlIENvbHVtbixcbiAgY3JlYXRlQWRhcHRlckVycm9yLFxuICB0eXBlIEZpbHRlck9wZXJhdG9yLFxuICB0eXBlIFRhYmxlLFxufSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBRdWVyeSwgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IE1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEgfSBmcm9tIFwiLi9kYXRhdHlwZVwiO1xuaW1wb3J0IHsgZ2V0VGFibGVzUXVlcnksIGdldFRpbWV6b25lUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIE15U1FMQWRhcHRlclJlcXVpcmVtZW50cyA9IEFkYXB0ZXJSZXF1aXJlbWVudHM7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNeVNRTEFkYXB0ZXIocmVxdWlyZW1lbnRzOiBNeVNRTEFkYXB0ZXJSZXF1aXJlbWVudHMpOiBBZGFwdGVyIHtcbiAgY29uc3QgeyBleGVjdXRvciwgLi4uX290aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWxldGUoX2RldGFpbHMsIF9vcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyRGVsZXRlUmVzdWx0Pj4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfSxcblxuICAgIGluc2VydChfZGV0YWlscywgX29wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJJbnNlcnRSZXN1bHQ+PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgdGltZXpvbmVRdWVyeSA9IGdldFRpbWV6b25lUXVlcnkocmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbW3RhYmxlc0Vycm9yLCB0YWJsZXNdLCBbdGltZXpvbmVFcnJvciwgdGltZXpvbmVzXV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0YWJsZXNRdWVyeSwgb3B0aW9ucyksXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0aW1lem9uZVF1ZXJ5LCBvcHRpb25zKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHRhYmxlc0Vycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB0YWJsZXNFcnJvciwgcXVlcnk6IHRhYmxlc1F1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWV6b25lRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRpbWV6b25lRXJyb3IsIHF1ZXJ5OiB0aW1lem9uZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZXpvbmUgPSB0aW1lem9uZXNbMF0/LnRpbWV6b25lO1xuXG4gICAgICAgIGlmICghdGltZXpvbmUpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IG5ldyBFcnJvcihcIlRpbWV6b25lIG5vdCBmb3VuZFwiKSwgcXVlcnk6IHRpbWV6b25lUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeTogdGFibGVzUXVlcnksIHRhYmxlcywgdGltZXpvbmUgfSldO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcXVlcnkoX2RldGFpbHMsIF9vcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyUXVlcnlSZXN1bHQ+PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlKF9kZXRhaWxzLCBfb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclVwZGF0ZVJlc3VsdD4+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludHJvc3BlY3Rpb24oYXJnczoge1xuICBxdWVyeTogUXVlcnk7XG4gIHRhYmxlczogUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRhYmxlc1F1ZXJ5PjtcbiAgdGltZXpvbmU6IHN0cmluZztcbn0pOiBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCB7XG4gIGNvbnN0IHsgcXVlcnksIHRhYmxlcywgdGltZXpvbmUgfSA9IGFyZ3M7XG5cbiAgcmV0dXJuIHRhYmxlcy5yZWR1Y2UoXG4gICAgKHJlc3VsdCwgdGFibGUpID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hcyB9ID0gcmVzdWx0O1xuICAgICAgY29uc3QgeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSB9ID0gdGFibGU7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBvc2l0aW9uIC0gYi5wb3NpdGlvbilcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoY29sdW1ucywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGF0eXBlLCBuYW1lOiBjb2x1bW5OYW1lIH0gPSBjb2x1bW47XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGV4T2ZQYXJlbnRoZXNpcyA9IGRhdGF0eXBlLmluZGV4T2YoXCIoXCIpO1xuICAgICAgICAgICAgY29uc3Qgc3RyaXBwZWREYXRhVHlwZSA9IChpbmRleE9mUGFyZW50aGVzaXMgPiAtMSA/IGRhdGF0eXBlLnN1YnN0cmluZygwLCBpbmRleE9mUGFyZW50aGVzaXMpIDogZGF0YXR5cGUpXG4gICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbnMsXG4gICAgICAgICAgICAgIFtjb2x1bW5OYW1lXToge1xuICAgICAgICAgICAgICAgIGRhdGF0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAuLi4oTVlTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQVtzdHJpcHBlZERhdGFUeXBlXSB8fCB7IGdyb3VwOiBcInJhd1wiIH0pLFxuICAgICAgICAgICAgICAgICAgaXNBcnJheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBpc05hdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHN0cmlwcGVkRGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOlxuICAgICAgICAgICAgICAgICAgICBzdHJpcHBlZERhdGFUeXBlID09PSBcImVudW1cIiA/IGRhdGF0eXBlLnNsaWNlKGBlbnVtKCdgLmxlbmd0aCwgLWAnKWAubGVuZ3RoKS5zcGxpdChgJywnYCkgOiBbXSxcbiAgICAgICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZrQ29sdW1uOiBjb2x1bW4uZmtfY29sdW1uLFxuICAgICAgICAgICAgICAgIGZrU2NoZW1hOiBzY2hlbWEsXG4gICAgICAgICAgICAgICAgZmtUYWJsZTogY29sdW1uLmZrX3RhYmxlLFxuICAgICAgICAgICAgICAgIGlzQ29tcHV0ZWQ6IEJvb2xlYW4oY29sdW1uLmNvbXB1dGVkKSxcbiAgICAgICAgICAgICAgICBpc0luUHJpbWFyeUtleTogQm9vbGVhbihjb2x1bW4ucGspLFxuICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAgbnVsbGFibGU6IEJvb2xlYW4oY29sdW1uLm51bGxhYmxlKSxcbiAgICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgfSBhcyBjb25zdCBzYXRpc2ZpZXMgQ29sdW1uLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9IGFzIFRhYmxlW1wiY29sdW1uc1wiXSxcbiAgICAgICAgKTtcblxuICAgICAgaWYgKHNjaGVtYXNbc2NoZW1hXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjaGVtYXNbc2NoZW1hXSA9IHsgbmFtZTogc2NoZW1hLCB0YWJsZXM6IHt9IH07XG4gICAgICB9XG5cbiAgICAgIHNjaGVtYXNbc2NoZW1hXS50YWJsZXNbdGFibGVOYW1lXSA9IHsgY29sdW1uczogY29sdW1uc1JlY29yZCwgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHsgZmlsdGVyT3BlcmF0b3JzLCBxdWVyeSwgc2NoZW1hczoge30sIHRpbWV6b25lIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0IGFzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICApO1xufVxuXG5jb25zdCBmaWx0ZXJPcGVyYXRvcnMgPSBbXG4gIFwiPVwiLFxuICBcIiE9XCIsXG4gIFwiPlwiLFxuICBcIj49XCIsXG4gIFwiPFwiLFxuICBcIjw9XCIsXG4gIFwiaXNcIixcbiAgXCJpcyBub3RcIixcbiAgXCJsaWtlXCIsXG4gIFwibm90IGxpa2VcIixcbl0gc2F0aXNmaWVzIEZpbHRlck9wZXJhdG9yW107XG4iLCAiaW1wb3J0IHR5cGUgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCBjb25zdCBNWVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBOiBSZWNvcmQ8c3RyaW5nLCBQaWNrPERhdGFUeXBlLCBcImdyb3VwXCI+PiA9IHtcbiAgYmlnaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBiaW5hcnk6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgYml0OiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIGJsb2I6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgY2hhcjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBcImNoYXIgYmluYXJ5XCI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgZGF0ZToge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIGRhdGV0aW1lOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgZGVjOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBkZWNpbWFsOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBkb3VibGU6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIFwiZG91YmxlIHByZWNpc2lvblwiOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBlbnVtOiB7XG4gICAgZ3JvdXA6IFwiZW51bVwiLFxuICB9LFxuICBmaXhlZDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZmxvYXQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGdlb21ldHJ5OiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIGdlb21ldHJ5Y29sbGVjdGlvbjoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBpbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGludGVnZXI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGpzb246IHtcbiAgICBncm91cDogXCJqc29uXCIsXG4gIH0sXG4gIGxpbmVzdHJpbmc6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgbG9uZzoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBcImxvbmcgdmFyY2hhclwiOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGxvbmdibG9iOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGxvbmd0ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGxvbmd2YXJiaW5hcnk6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbG9uZ3ZhcmNoYXI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbWVkaXVtYmxvYjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBtZWRpdW1pbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIG1lZGl1bXRleHQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbXVsdGlsaW5lc3RyaW5nOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIG11bHRpcG9pbnQ6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgbXVsdGlwb2x5Z29uOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIG51bWVyaWM6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIHBvaW50OiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIHBvbHlnb246IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgcmVhbDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgLyoqXG4gICAqIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzkuNS9lbi9zZXQuaHRtbFxuICAgKi9cbiAgc2V0OiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIHNtYWxsaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICB0ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHRpbWU6IHtcbiAgICBncm91cDogXCJ0aW1lXCIsXG4gIH0sXG4gIHRpbWVzdGFtcDoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIHRpbnlibG9iOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHRpbnlpbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIHRpbnl0ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHZhcmJpbmFyeToge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB2YXJjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIFwidmFyY2hhciBiaW5hcnlcIjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICAvKipcbiAgICogaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOS41L2VuL3ZlY3Rvci5odG1sXG4gICAqL1xuICB2ZWN0b3I6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgeWVhcjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbn07XG4iLCAiaW1wb3J0IHsgc3FsIH0gZnJvbSBcImt5c2VseVwiO1xuaW1wb3J0IHsganNvbkFycmF5RnJvbSB9IGZyb20gXCJreXNlbHkvaGVscGVycy9teXNxbFwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGNvbXBpbGUsIHR5cGUgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB7IGdldE15U1FMQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcblxuaW50ZXJmYWNlIERhdGFiYXNlIHtcbiAgLyoqIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzguNC9lbi9pbmZvcm1hdGlvbi1zY2hlbWEtY29sdW1ucy10YWJsZS5odG1sICovXG4gIFwiaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnNcIjoge1xuICAgIFRBQkxFX1NDSEVNQTogc3RyaW5nO1xuICAgIFRBQkxFX05BTUU6IHN0cmluZztcbiAgICBDT0xVTU5fTkFNRTogc3RyaW5nO1xuICAgIC8qKiBUaGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbiB3aXRoaW4gdGhlIHRhYmxlLiBPUkRJTkFMX1BPU0lUSU9OIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHlvdSBtaWdodCB3YW50IHRvIHNheSBPUkRFUiBCWSBPUkRJTkFMX1BPU0lUSU9OLiBVbmxpa2UgU0hPVyBDT0xVTU5TLCBTRUxFQ1QgZnJvbSB0aGUgQ09MVU1OUyB0YWJsZSBkb2VzIG5vdCBoYXZlIGF1dG9tYXRpYyBvcmRlcmluZy4gKi9cbiAgICBPUkRJTkFMX1BPU0lUSU9OOiBudW1iZXI7XG4gICAgLyoqIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY29sdW1uLiBUaGlzIGlzIE5VTEwgaWYgdGhlIGNvbHVtbiBoYXMgYW4gZXhwbGljaXQgZGVmYXVsdCBvZiBOVUxMLCBvciBpZiB0aGUgY29sdW1uIGRlZmluaXRpb24gaW5jbHVkZXMgbm8gREVGQVVMVCBjbGF1c2UuICovXG4gICAgQ09MVU1OX0RFRkFVTFQ6IHVua25vd247XG4gICAgSVNfTlVMTEFCTEU6IFwiWUVTXCIgfCBcIk5PXCI7XG4gICAgLyoqIENvbnRhaW5zIHRoZSB0eXBlIG5hbWUgYW5kIHBvc3NpYmx5IG90aGVyIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIHByZWNpc2lvbiBvciBsZW5ndGguICovXG4gICAgQ09MVU1OX1RZUEU6IHN0cmluZztcbiAgICAvKiogZW1wdHkgLSBub3QgaW5kZXhlZCBvciBpcyBzZWNvbmRhcnkgY29sdW1uIGluIGEgbXVsdGktY29sdW1uIG5vbnVuaXF1ZSBpbmRleC4gUFJJIC0gcGFydCBvZiBhIHByaW1hcnkga2V5LiBVTkkgLSBmaXJzdCBjb2x1bW4gb2YgYSB1bmlxdWUgaW5kZXguIE1VTCAtIGZpcnN0IGNvbHVtbiBvZiBhIG5vbnVuaXF1ZSBpbmRleCAqL1xuICAgIENPTFVNTl9LRVk6IFwiXCIgfCBcIlBSSVwiIHwgXCJVTklcIiB8IFwiTVVMXCI7XG4gICAgLyoqIEV4dHJhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2x1bW4uIFBvc3NpYmxlIHZhbHVlcyBhcmUgKi9cbiAgICBFWFRSQTpcbiAgICAgIHwgXCJcIlxuICAgICAgfCBcImF1dG9faW5jcmVtZW50XCJcbiAgICAgIHwgXCJvbiB1cGRhdGUgQ1VSUkVOVF9USU1FU1RBTVBcIlxuICAgICAgfCBcIlNUT1JFRCBHRU5FUkFURURcIlxuICAgICAgfCBcIlZJUlRVQUwgR0VORVJBVEVEXCJcbiAgICAgIHwgXCJERUZBVUxUIEdFTkVSQVRFRFwiO1xuICAgIC8qKiBGb3IgZ2VuZXJhdGVkIGNvbHVtbnMsIGRpc3BsYXlzIHRoZSBleHByZXNzaW9uIHVzZWQgdG8gY29tcHV0ZSBjb2x1bW4gdmFsdWVzLiBFbXB0eSBmb3Igbm9uZ2VuZXJhdGVkIGNvbHVtbnMuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBnZW5lcmF0ZWQgY29sdW1ucywgc2VlIFNlY3Rpb24gMTUuMS4yMC44LCBcdTIwMUNDUkVBVEUgVEFCTEUgYW5kIEdlbmVyYXRlZCBDb2x1bW5zXHUyMDFELiAqL1xuICAgIEdFTkVSQVRJT05fRVhQUkVTU0lPTjogc3RyaW5nO1xuICB9O1xuXG4gIC8qKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi84LjQvZW4vaW5mb3JtYXRpb24tc2NoZW1hLXRhYmxlcy10YWJsZS5odG1sICovXG4gIFwiaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlc1wiOiB7XG4gICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBzY2hlbWEgKGRhdGFiYXNlKSB0byB3aGljaCB0aGUgdGFibGUgYmVsb25ncy4gKi9cbiAgICBUQUJMRV9TQ0hFTUE6IHN0cmluZztcbiAgICBUQUJMRV9OQU1FOiBzdHJpbmc7XG4gICAgLyoqIEJBU0UgVEFCTEUgZm9yIGEgdGFibGUsIFZJRVcgZm9yIGEgdmlldywgb3IgU1lTVEVNIFZJRVcgZm9yIGFuIElORk9STUFUSU9OX1NDSEVNQSB0YWJsZS4gKi9cbiAgICBUQUJMRV9UWVBFOiBcIkJBU0UgVEFCTEVcIiB8IFwiVklFV1wiIHwgXCJTWVNURU0gVklFV1wiO1xuICB9O1xuXG4gIC8qKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi84LjQvZW4vaW5mb3JtYXRpb24tc2NoZW1hLWtleS1jb2x1bW4tdXNhZ2UtdGFibGUuaHRtbCAqL1xuICBcImluZm9ybWF0aW9uX3NjaGVtYS5LRVlfQ09MVU1OX1VTQUdFXCI6IHtcbiAgICBDT05TVFJBSU5UX1NDSEVNQTogc3RyaW5nO1xuICAgIENPTlNUUkFJTlRfTkFNRTogc3RyaW5nO1xuICAgIFRBQkxFX1NDSEVNQTogc3RyaW5nO1xuICAgIFRBQkxFX05BTUU6IHN0cmluZztcbiAgICBDT0xVTU5fTkFNRTogc3RyaW5nO1xuICAgIC8qKiBudWxsIC0gd2hlbiB1bmlxdWUgb3IgcHJpbWFyeSBrZXkgY29uc3RyYWludC4gMS1uIC0gd2hlbiBmb3JlaWduIGtleSBjb25zdHJhaW50ICovXG4gICAgUE9TSVRJT05fSU5fVU5JUVVFX0NPTlNUUkFJTlQ6IG51bWJlciB8IG51bGw7XG4gICAgUkVGRVJFTkNFRF9UQUJMRV9TQ0hFTUE6IHN0cmluZztcbiAgICBSRUZFUkVOQ0VEX1RBQkxFX05BTUU6IHN0cmluZztcbiAgICBSRUZFUkVOQ0VEX0NPTFVNTl9OQU1FOiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzguNC9lbi9pbmZvcm1hdGlvbi1zY2hlbWEtdGFibGUtY29uc3RyYWludHMtdGFibGUuaHRtbCAqL1xuICBcImluZm9ybWF0aW9uX3NjaGVtYS5UQUJMRV9DT05TVFJBSU5UU1wiOiB7XG4gICAgQ09OU1RSQUlOVF9TQ0hFTUE6IHN0cmluZztcbiAgICBDT05TVFJBSU5UX05BTUU6IHN0cmluZztcbiAgICBUQUJMRV9TQ0hFTUE6IHN0cmluZztcbiAgICBUQUJMRV9OQU1FOiBzdHJpbmc7XG4gICAgQ09OU1RSQUlOVF9UWVBFOiBcIlBSSU1BUlkgS0VZXCIgfCBcIkZPUkVJR04gS0VZXCIgfCBcIlVOSVFVRVwiIHwgXCJDSEVDS1wiO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPikge1xuICByZXR1cm4gY29tcGlsZShcbiAgICBnZXRNeVNRTEJ1aWxkZXI8RGF0YWJhc2U+KHJlcXVpcmVtZW50cylcbiAgICAgIC5zZWxlY3RGcm9tKFwiaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBhcyB0XCIpXG4gICAgICAud2hlcmUoXCJ0LlRBQkxFX1NDSEVNQVwiLCBcIj1cIiwgc3FsPHN0cmluZz5gZGF0YWJhc2UoKWApXG4gICAgICAud2hlcmUoXCJ0LlRBQkxFX1RZUEVcIiwgXCJpblwiLCBbXCJCQVNFIFRBQkxFXCIsIFwiVklFV1wiXSlcbiAgICAgIC5zZWxlY3QoW1widC5UQUJMRV9TQ0hFTUEgYXMgc2NoZW1hXCIsIFwidC5UQUJMRV9OQU1FIGFzIG5hbWVcIiwgXCJ0LlRBQkxFX1RZUEUgYXMgdHlwZVwiXSlcbiAgICAgIC4kbmFycm93VHlwZTx7IHR5cGU6IFwiQkFTRSBUQUJMRVwiIHwgXCJWSUVXXCIgfT4oKVxuICAgICAgLnNlbGVjdCgoZWIpID0+XG4gICAgICAgIC8vIGBqc29uX2FycmF5YWdnYCBpZ25vcmVzIGBvcmRlciBieWAgaW5zaWRlIHRoZSBzdWJxdWVyeSwgc28gd2UgbmVlZCB0byBvcmRlciBhZnRlciBhZ2dyZWdhdGlvbi5cbiAgICAgICAganNvbkFycmF5RnJvbShcbiAgICAgICAgICBlYlxuICAgICAgICAgICAgLnNlbGVjdEZyb20oXCJpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBhcyBjXCIpXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJpbmZvcm1hdGlvbl9zY2hlbWEuS0VZX0NPTFVNTl9VU0FHRSBhcyBrY3VcIiwgKGpiKSA9PlxuICAgICAgICAgICAgICBqYlxuICAgICAgICAgICAgICAgIC5vblJlZihcImtjdS5UQUJMRV9TQ0hFTUFcIiwgXCI9XCIsIFwiYy5UQUJMRV9TQ0hFTUFcIilcbiAgICAgICAgICAgICAgICAub25SZWYoXCJrY3UuVEFCTEVfTkFNRVwiLCBcIj1cIiwgXCJjLlRBQkxFX05BTUVcIilcbiAgICAgICAgICAgICAgICAub25SZWYoXCJrY3UuQ09MVU1OX05BTUVcIiwgXCI9XCIsIFwiYy5DT0xVTU5fTkFNRVwiKVxuICAgICAgICAgICAgICAgIC8vIG9ubHkgZ2V0IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnRzXG4gICAgICAgICAgICAgICAgLm9uKFwia2N1LlBPU0lUSU9OX0lOX1VOSVFVRV9DT05TVFJBSU5UXCIsIFwiaXMgbm90XCIsIG51bGwpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLndoZXJlUmVmKFwiYy5UQUJMRV9TQ0hFTUFcIiwgXCI9XCIsIFwidC5UQUJMRV9TQ0hFTUFcIilcbiAgICAgICAgICAgIC53aGVyZVJlZihcImMuVEFCTEVfTkFNRVwiLCBcIj1cIiwgXCJ0LlRBQkxFX05BTUVcIilcbiAgICAgICAgICAgIC5zZWxlY3QoW1xuICAgICAgICAgICAgICBcImMuQ09MVU1OX05BTUUgYXMgbmFtZVwiLFxuICAgICAgICAgICAgICBcImMuQ09MVU1OX1RZUEUgYXMgZGF0YXR5cGVcIixcbiAgICAgICAgICAgICAgXCJjLk9SRElOQUxfUE9TSVRJT04gYXMgcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgXCJrY3UuUkVGRVJFTkNFRF9UQUJMRV9OQU1FIGFzIGZrX3RhYmxlXCIsXG4gICAgICAgICAgICAgIFwia2N1LlJFRkVSRU5DRURfQ09MVU1OX05BTUUgYXMgZmtfY29sdW1uXCIsXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICAgLnNlbGVjdCgoZWIpID0+IFtcbiAgICAgICAgICAgICAgZWIoXCJjLkVYVFJBXCIsIFwiPVwiLCBcImF1dG9faW5jcmVtZW50XCIpLmFzKFwiYXV0b2luY3JlbWVudFwiKSxcbiAgICAgICAgICAgICAgZWIoXCJjLkVYVFJBXCIsIFwiaW5cIiwgW1wib24gdXBkYXRlIENVUlJFTlRfVElNRVNUQU1QXCIsIFwiU1RPUkVEIEdFTkVSQVRFRFwiLCBcIlZJUlRVQUwgR0VORVJBVEVEXCJdKS5hcyhcbiAgICAgICAgICAgICAgICBcImNvbXB1dGVkXCIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGViKFwiYy5DT0xVTU5fS0VZXCIsIFwiPVwiLCBcIlBSSVwiKS5hcyhcInBrXCIpLFxuICAgICAgICAgICAgICBlYihcImMuSVNfTlVMTEFCTEVcIiwgXCI9XCIsIFwiWUVTXCIpLmFzKFwibnVsbGFibGVcIiksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgKS5hcyhcImNvbHVtbnNcIiksXG4gICAgICApXG4gICAgICAub3JkZXJCeShcInQuVEFCTEVfU0NIRU1BXCIpXG4gICAgICAub3JkZXJCeShcInQuVEFCTEVfTkFNRVwiKVxuICAgICAgLm9yZGVyQnkoXCJ0LlRBQkxFX1RZUEVcIiksXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVGFibGVzUXVlcnkoKTogUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRhYmxlc1F1ZXJ5PiB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMSxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJpbnRcIixcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIHBvc2l0aW9uOiAxLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJiaW5hcnkoMTYpXCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwidXVpZFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIHBvc2l0aW9uOiAyLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyKDI1NSlcIixcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgcG9zaXRpb246IDMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAxLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJpZF9uYW1lXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgcG9zaXRpb246IDQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgbmFtZTogXCJhbmltYWxzXCIsXG4gICAgICBzY2hlbWE6IFwic3R1ZGlvXCIsXG4gICAgICB0eXBlOiBcIkJBU0UgVEFCTEVcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiaW50XCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBudWxsYWJsZTogMCxcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBwb3NpdGlvbjogMSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIHBvc2l0aW9uOiAyLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJlbnVtKCdhZG1pbicsJ21haW50YWluZXInLCdtZW1iZXInKVwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcInJvbGVcIixcbiAgICAgICAgICBudWxsYWJsZTogMCxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBwb3NpdGlvbjogMyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiaW50XCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBcImlkXCIsXG4gICAgICAgICAgZmtfdGFibGU6IFwiYW5pbWFsc1wiLFxuICAgICAgICAgIG5hbWU6IFwiYW5pbWFsX2lkXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgcG9zaXRpb246IDQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgbmFtZTogXCJ1c2Vyc1wiLFxuICAgICAgc2NoZW1hOiBcInN0dWRpb1wiLFxuICAgICAgdHlwZTogXCJCQVNFIFRBQkxFXCIsXG4gICAgfSxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWV6b25lUXVlcnkocmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPikge1xuICBjb25zdCBidWlsZGVyID0gZ2V0TXlTUUxCdWlsZGVyKHJlcXVpcmVtZW50cyk7XG5cbiAgY29uc3Qgc2Vzc2lvblR6ID0gc3FsPFwiU1lTVEVNXCIgfCAoc3RyaW5nICYge30pPmBAQHNlc3Npb24udGltZV96b25lYDtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAuc2VsZWN0Tm9Gcm9tKFxuICAgICAgICBidWlsZGVyXG4gICAgICAgICAgLmNhc2UoKVxuICAgICAgICAgIC53aGVuKHNlc3Npb25UeiwgXCI9XCIsIFwiU1lTVEVNXCIpXG4gICAgICAgICAgLnRoZW4oc3FsPHN0cmluZz5gQEBzeXN0ZW1fdGltZV96b25lYClcbiAgICAgICAgICAuZWxzZShzZXNzaW9uVHopXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLmFzKFwidGltZXpvbmVcIiksXG4gICAgICApXG4gICAgICAuJG5hcnJvd1R5cGU8eyB0aW1lem9uZTogc3RyaW5nIH0+KCksXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVGltZXpvbmVRdWVyeSgpOiBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGltZXpvbmVRdWVyeT4ge1xuICByZXR1cm4gW3sgdGltZXpvbmU6IFwiVVRDXCIgfV07XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL215c3FsLmQudHNcIiAvPlxuaW1wb3J0IHsgc3FsIH0gZnJvbSAnLi4vcmF3LWJ1aWxkZXIvc3FsLmpzJztcbmltcG9ydCB7IGdldEpzb25PYmplY3RBcmdzIH0gZnJvbSAnLi4vdXRpbC9qc29uLW9iamVjdC1hcmdzLmpzJztcbi8qKlxuICogQSBNeVNRTCBoZWxwZXIgZm9yIGFnZ3JlZ2F0aW5nIGEgc3VicXVlcnkgaW50byBhIEpTT04gYXJyYXkuXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgaXMgb25seSBndWFyYW50ZWVkIHRvIGZ1bGx5IHdvcmsgd2l0aCB0aGUgYnVpbHQtaW4gYE15c3FsRGlhbGVjdGAuXG4gKiBXaGlsZSB0aGUgcHJvZHVjZWQgU1FMIGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgTXlTUUwgZGF0YWJhc2VzLCBzb21lIHRoaXJkLXBhcnR5IGRpYWxlY3RzXG4gKiBtYXkgbm90IHBhcnNlIHRoZSBuZXN0ZWQgSlNPTiBpbnRvIGFycmF5cy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluXG4gKiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAgdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9teXNxbCdcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25BcnJheUZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC5vcmRlckJ5KCdwZXQubmFtZScpXG4gKiAgICAgKS5hcygncGV0cycpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/LnBldHNbMF0/LnBldF9pZFxuICogcmVzdWx0WzBdPy5wZXRzWzBdPy5uYW1lXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IGBpZGAsIChcbiAqICAgc2VsZWN0IGNhc3QoY29hbGVzY2UoanNvbl9hcnJheWFnZyhqc29uX29iamVjdChcbiAqICAgICAncGV0X2lkJywgYGFnZ2AuYHBldF9pZGAsXG4gKiAgICAgJ25hbWUnLCBgYWdnYC5gbmFtZWBcbiAqICAgKSksICdbXScpIGFzIGpzb24pIGZyb20gKFxuICogICAgIHNlbGVjdCBgcGV0YC5gaWRgIGFzIGBwZXRfaWRgLCBgcGV0YC5gbmFtZWBcbiAqICAgICBmcm9tIGBwZXRgXG4gKiAgICAgd2hlcmUgYHBldGAuYG93bmVyX2lkYCA9IGBwZXJzb25gLmBpZGBcbiAqICAgICBvcmRlciBieSBgcGV0YC5gbmFtZWBcbiAqICAgKSBhcyBgYWdnYFxuICogKSBhcyBgcGV0c2BcbiAqIGZyb20gYHBlcnNvbmBcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkFycmF5RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCBjYXN0KGNvYWxlc2NlKGpzb25fYXJyYXlhZ2coanNvbl9vYmplY3QoJHtzcWwuam9pbihnZXRNeXNxbEpzb25PYmplY3RBcmdzKGV4cHIudG9PcGVyYXRpb25Ob2RlKCksICdhZ2cnKSl9KSksICdbXScpIGFzIGpzb24pIGZyb20gJHtleHByfSBhcyBhZ2cpYDtcbn1cbi8qKlxuICogQSBNeVNRTCBoZWxwZXIgZm9yIHR1cm5pbmcgYSBzdWJxdWVyeSBpbnRvIGEgSlNPTiBvYmplY3QuXG4gKlxuICogVGhlIHN1YnF1ZXJ5IG11c3Qgb25seSByZXR1cm4gb25lIHJvdy5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gZnVsbHkgd29yayB3aXRoIHRoZSBidWlsdC1pbiBgTXlzcWxEaWFsZWN0YC5cbiAqIFdoaWxlIHRoZSBwcm9kdWNlZCBTUUwgaXMgY29tcGF0aWJsZSB3aXRoIGFsbCBNeVNRTCBkYXRhYmFzZXMsIHNvbWUgdGhpcmQtcGFydHkgZGlhbGVjdHNcbiAqIG1heSBub3QgcGFyc2UgdGhlIG5lc3RlZCBKU09OIGludG8gb2JqZWN0cy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluXG4gKiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAgdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpzb25PYmplY3RGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvbXlzcWwnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uT2JqZWN0RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLndoZXJlKCdwZXQuaXNfZmF2b3JpdGUnLCAnPScsIHRydWUpXG4gKiAgICAgKS5hcygnZmF2b3JpdGVfcGV0JylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8uZmF2b3JpdGVfcGV0Py5wZXRfaWRcbiAqIHJlc3VsdFswXT8uZmF2b3JpdGVfcGV0Py5uYW1lXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IGBpZGAsIChcbiAqICAgc2VsZWN0IGpzb25fb2JqZWN0KFxuICogICAgICdwZXRfaWQnLCBgb2JqYC5gcGV0X2lkYCxcbiAqICAgICAnbmFtZScsIGBvYmpgLmBuYW1lYFxuICogICApIGZyb20gKFxuICogICAgIHNlbGVjdCBgcGV0YC5gaWRgIGFzIGBwZXRfaWRgLCBgcGV0YC5gbmFtZWBcbiAqICAgICBmcm9tIGBwZXRgXG4gKiAgICAgd2hlcmUgYHBldGAuYG93bmVyX2lkYCA9IGBwZXJzb25gLmBpZGBcbiAqICAgICBhbmQgYHBldGAuYGlzX2Zhdm9yaXRlYCA9ID9cbiAqICAgKSBhcyBvYmpcbiAqICkgYXMgYGZhdm9yaXRlX3BldGBcbiAqIGZyb20gYHBlcnNvbmBcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbk9iamVjdEZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QganNvbl9vYmplY3QoJHtzcWwuam9pbihnZXRNeXNxbEpzb25PYmplY3RBcmdzKGV4cHIudG9PcGVyYXRpb25Ob2RlKCksICdvYmonKSl9KSBmcm9tICR7ZXhwcn0gYXMgb2JqKWA7XG59XG4vKipcbiAqIFRoZSBNeVNRTCBganNvbl9vYmplY3RgIGZ1bmN0aW9uLlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBmdWxseSB3b3JrIHdpdGggdGhlIGJ1aWx0LWluIGBNeXNxbERpYWxlY3RgLlxuICogV2hpbGUgdGhlIHByb2R1Y2VkIFNRTCBpcyBjb21wYXRpYmxlIHdpdGggYWxsIE15U1FMIGRhdGFiYXNlcywgc29tZSB0aGlyZC1wYXJ0eSBkaWFsZWN0c1xuICogbWF5IG5vdCBwYXJzZSB0aGUgbmVzdGVkIEpTT04gaW50byBvYmplY3RzLiBJbiB0aGVzZSBjYXNlcyB5b3UgY2FuIHVzZSB0aGUgYnVpbHQgaW5cbiAqIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYCB0byBwYXJzZSB0aGUgcmVzdWx0cy5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQnVpbGRPYmplY3Qoe1xuICogICAgICAgZmlyc3Q6IGViLnJlZignZmlyc3RfbmFtZScpLFxuICogICAgICAgbGFzdDogZWIucmVmKCdsYXN0X25hbWUnKSxcbiAqICAgICAgIGZ1bGw6IGViLmZuKCdjb25jYXQnLCBbJ2ZpcnN0X25hbWUnLCBlYi52YWwoJyAnKSwgJ2xhc3RfbmFtZSddKVxuICogICAgIH0pLmFzKCduYW1lJylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8ubmFtZS5maXJzdFxuICogcmVzdWx0WzBdPy5uYW1lLmxhc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5mdWxsXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwganNvbl9vYmplY3QoXG4gKiAgICdmaXJzdCcsIGZpcnN0X25hbWUsXG4gKiAgICdsYXN0JywgbGFzdF9uYW1lLFxuICogICAnZnVsbCcsIGNvbmNhdChgZmlyc3RfbmFtZWAsID8sIGBsYXN0X25hbWVgKVxuICogKSBhcyBcIm5hbWVcIlxuICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25CdWlsZE9iamVjdChvYmopIHtcbiAgICByZXR1cm4gc3FsIGBqc29uX29iamVjdCgke3NxbC5qb2luKE9iamVjdC5rZXlzKG9iaikuZmxhdE1hcCgoaykgPT4gW3NxbC5saXQoayksIG9ialtrXV0pKX0pYDtcbn1cbmZ1bmN0aW9uIGdldE15c3FsSnNvbk9iamVjdEFyZ3Mobm9kZSwgdGFibGUpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ2V0SnNvbk9iamVjdEFyZ3Mobm9kZSwgdGFibGUpO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTXlTUUwganNvbkFycmF5RnJvbSBhbmQganNvbk9iamVjdEZyb20gZnVuY3Rpb25zIGNhbiBvbmx5IGhhbmRsZSBleHBsaWNpdCBzZWxlY3Rpb25zIGR1ZSB0byBsaW1pdGF0aW9ucyBvZiB0aGUganNvbl9vYmplY3QgZnVuY3Rpb24uIHNlbGVjdEFsbCgpIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBzdWJxdWVyeS4nKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgdHlwZSBLeXNlbHksIE15c3FsQWRhcHRlciwgTXlzcWxRdWVyeUNvbXBpbGVyIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGdldEJ1aWxkZXIgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRNeVNRTEJ1aWxkZXI8RGF0YWJhc2UgPSBhbnk+KFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKTogS3lzZWx5PERhdGFiYXNlPiB7XG4gIHJldHVybiBnZXRCdWlsZGVyKHsgLi4ucmVxdWlyZW1lbnRzLCBBZGFwdGVyOiBNeXNxbEFkYXB0ZXIsIFF1ZXJ5Q29tcGlsZXI6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LEVBQ04sU0FBVSxFQUFRRixFQUFPLFNBQ3pCLE9BQUFKLEVBQ0EsTUFBT0QsQ0FDVCxDQUNGLENBQ0YsRUFDQSxDQUFDLENBQ0gsRUFFRixPQUFJRixFQUFRRyxDQUFNLElBQU0sU0FDdEJILEVBQVFHLENBQU0sRUFBSSxDQUFFLEtBQU1BLEVBQVEsT0FBUSxDQUFDLENBQUUsR0FHL0NILEVBQVFHLENBQU0sRUFBRSxPQUFPRCxDQUFTLEVBQUksQ0FBRSxRQUFTRSxFQUFlLEtBQU1GLEVBQVcsT0FBQUMsQ0FBTyxFQUUvRUwsQ0FDVCxFQUNBLENBQUUsZ0JBQUFlLEVBQWlCLE1BQUFoQixFQUFPLFFBQVMsQ0FBQyxFQUFHLFNBQUFKLENBQVMsQ0FDbEQsQ0FDRixDQUVBLElBQU1vQixFQUFrQixDQUN0QixJQUNBLEtBQ0EsSUFDQSxLQUNBLElBQ0EsS0FDQSxLQUNBLFNBQ0EsT0FDQSxVQUNGIiwKICAibmFtZXMiOiBbImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIk1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAianNvbkFycmF5RnJvbSIsICJleHByIiwgInNxbCIsICJnZXRNeXNxbEpzb25PYmplY3RBcmdzIiwgImdldE15c3FsSnNvbk9iamVjdEFyZ3MiLCAibm9kZSIsICJ0YWJsZSIsICJnZXRKc29uT2JqZWN0QXJncyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJnZXRNeVNRTEJ1aWxkZXIiLCAicmVxdWlyZW1lbnRzIiwgImdldEJ1aWxkZXIiLCAiTXlzcWxBZGFwdGVyIiwgIk15c3FsUXVlcnlDb21waWxlciIsICJnZXRUYWJsZXNRdWVyeSIsICJyZXF1aXJlbWVudHMiLCAiY29tcGlsZSIsICJnZXRNeVNRTEJ1aWxkZXIiLCAic3FsIiwgImViIiwgImpzb25BcnJheUZyb20iLCAiamIiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgImdldFRpbWV6b25lUXVlcnkiLCAiYnVpbGRlciIsICJzZXNzaW9uVHoiLCAibW9ja1RpbWV6b25lUXVlcnkiLCAiY3JlYXRlTXlTUUxBZGFwdGVyIiwgInJlcXVpcmVtZW50cyIsICJleGVjdXRvciIsICJfb3RoZXJSZXF1aXJlbWVudHMiLCAiX2RldGFpbHMiLCAiX29wdGlvbnMiLCAib3B0aW9ucyIsICJ0YWJsZXNRdWVyeSIsICJnZXRUYWJsZXNRdWVyeSIsICJ0aW1lem9uZVF1ZXJ5IiwgImdldFRpbWV6b25lUXVlcnkiLCAidGFibGVzRXJyb3IiLCAidGFibGVzIiwgInRpbWV6b25lRXJyb3IiLCAidGltZXpvbmVzIiwgImNyZWF0ZUFkYXB0ZXJFcnJvciIsICJ0aW1lem9uZSIsICJjcmVhdGVJbnRyb3NwZWN0aW9uIiwgImVycm9yIiwgImFyZ3MiLCAicXVlcnkiLCAicmVzdWx0IiwgInRhYmxlIiwgInNjaGVtYXMiLCAiY29sdW1ucyIsICJ0YWJsZU5hbWUiLCAic2NoZW1hIiwgImNvbHVtbnNSZWNvcmQiLCAiYSIsICJiIiwgImNvbHVtbiIsICJkYXRhdHlwZSIsICJjb2x1bW5OYW1lIiwgImluZGV4T2ZQYXJlbnRoZXNpcyIsICJzdHJpcHBlZERhdGFUeXBlIiwgIk1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEiLCAiZmlsdGVyT3BlcmF0b3JzIl0KfQo=
9
+ import{a as S}from"../../chunk-32BUC7NR.js";import{a as w}from"../../chunk-ZUEQ555M.js";import{a as E}from"../../chunk-OTK4ZF2W.js";import{i as s,n as b,o as M,p as L,r as T}from"../../chunk-A6CVKSUD.js";import{e as r}from"../../chunk-GDQBQ7MK.js";r();r();r();var B={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"}};r();r();function C(e){return s`(select cast(coalesce(json_arrayagg(json_object(${s.join(I(e.toOperationNode(),"agg"))})), '[]') as json) from ${e} as agg)`}function I(e,t){try{return S(e,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.")}}r();function f(e){return L({...e,Adapter:M,QueryCompiler:b})}function O(e){return T(f(e).selectFrom("information_schema.tables as t").where("t.TABLE_SCHEMA","=",s`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=>C(t.selectFrom("information_schema.columns as c").leftJoin("information_schema.KEY_COLUMN_USAGE as kcu",n=>n.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(n=>[n("c.EXTRA","=","auto_increment").as("autoincrement"),n("c.EXTRA","in",["on update CURRENT_TIMESTAMP","STORED GENERATED","VIRTUAL GENERATED"]).as("computed"),n("c.COLUMN_KEY","=","PRI").as("pk"),n("c.IS_NULLABLE","=","YES").as("nullable")])).as("columns")).orderBy("t.TABLE_SCHEMA").orderBy("t.TABLE_NAME").orderBy("t.TABLE_TYPE"))}function V(){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 h(e){let t=f(e),n=s`@@session.time_zone`;return T(t.selectNoFrom(t.case().when(n,"=","SYSTEM").then(s`@@system_time_zone`).else(n).end().as("timezone")).$narrowType())}function W(){return[{timezone:"UTC"}]}function re(e){let{executor:t,...n}=e;return{delete(a,o){throw new Error("Method not implemented.")},insert(a,o){throw new Error("Method not implemented.")},async introspect(a){try{let o=O(e),c=h(e),[[l,g],[p,i]]=await Promise.all([t.execute(o,a),t.execute(c,a)]);if(l)return E({error:l,query:o});if(p)return E({error:p,query:c});let A=i[0]?.timezone;return A?[null,k({query:o,tables:g,timezone:A})]:E({error:new Error("Timezone not found"),query:c})}catch(o){return E({error:o})}},query(a,o){throw new Error("Method not implemented.")},update(a,o){throw new Error("Method not implemented.")}}}function k(e){let{query:t,tables:n,timezone:a}=e;return n.reduce((o,c)=>{let{schemas:l}=o,{columns:g,name:p,schema:i}=c,A=g.sort((y,u)=>y.position-u.position).reduce((y,u)=>{let{datatype:d,name:N}=u,R=d.indexOf("("),_=(R>-1?d.substring(0,R):d).trim().toLowerCase();return{...y,[N]:{datatype:{...B[_]||{group:"raw"},isArray:!1,isNative:!0,name:_,options:_==="enum"?d.slice(6,-2).split("','"):[],schema:i},fkColumn:u.fk_column,fkSchema:i,fkTable:u.fk_table,isComputed:!!u.computed,isInPrimaryKey:!!u.pk,name:N,nullable:!!u.nullable,schema:i,table:p}}},{});return l[i]===void 0&&(l[i]={name:i,tables:{}}),l[i].tables[p]={columns:A,name:p,schema:i},o},{filterOperators:Q,query:t,schemas:{},timezone:a})}var Q=["=","!=",">",">=","<","<=","is","is not","like","not like"];r();function ie(e,t){throw new Error("Not implemented")}function ae(e,t){throw new Error("Not implemented")}function ue(e,t){throw new Error("Not implemented")}function se(e,t){throw new Error("Not implemented")}export{re as createMySQLAdapter,w as getCancelQuery,ie as getDeleteQuery,ae as getInsertQuery,ue as getSelectQuery,O as getTablesQuery,h as getTimezoneQuery,se as getUpdateQuery,V as mockTablesQuery,W as mockTimezoneQuery};
10
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9teXNxbC1jb3JlL2luZGV4LnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9hZGFwdGVyLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL215c3FsLWNvcmUvaW50cm9zcGVjdGlvbi50cyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2hlbHBlcnMvbXlzcWwuanMiLCAiLi4vLi4vLi4vZGF0YS9teXNxbC1jb3JlL2J1aWxkZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9teXNxbC1jb3JlL2RtbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG1sXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsaXR5XCI7XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBBZGFwdGVyLFxuICB0eXBlIEFkYXB0ZXJEZWxldGVSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckVycm9yLFxuICB0eXBlIEFkYXB0ZXJJbnNlcnRSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckludHJvc3BlY3RSZXN1bHQsXG4gIHR5cGUgQWRhcHRlclF1ZXJ5UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJSZXF1aXJlbWVudHMsXG4gIHR5cGUgQWRhcHRlclVwZGF0ZVJlc3VsdCxcbiAgdHlwZSBDb2x1bW4sXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVpdGhlciB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBNWVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBIH0gZnJvbSBcIi4vZGF0YXR5cGVcIjtcbmltcG9ydCB7IGdldFRhYmxlc1F1ZXJ5LCBnZXRUaW1lem9uZVF1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBNeVNRTEFkYXB0ZXJSZXF1aXJlbWVudHMgPSBBZGFwdGVyUmVxdWlyZW1lbnRzO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXlTUUxBZGFwdGVyKHJlcXVpcmVtZW50czogTXlTUUxBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLl9vdGhlclJlcXVpcmVtZW50cyB9ID0gcmVxdWlyZW1lbnRzO1xuXG4gIHJldHVybiB7XG4gICAgZGVsZXRlKF9kZXRhaWxzLCBfb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckRlbGV0ZVJlc3VsdD4+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH0sXG5cbiAgICBpbnNlcnQoX2RldGFpbHMsIF9vcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW5zZXJ0UmVzdWx0Pj4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfSxcblxuICAgIGFzeW5jIGludHJvc3BlY3Qob3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0YWJsZXNRdWVyeSA9IGdldFRhYmxlc1F1ZXJ5KHJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IHRpbWV6b25lUXVlcnkgPSBnZXRUaW1lem9uZVF1ZXJ5KHJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW1t0YWJsZXNFcnJvciwgdGFibGVzXSwgW3RpbWV6b25lRXJyb3IsIHRpbWV6b25lc11dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUodGFibGVzUXVlcnksIG9wdGlvbnMpLFxuICAgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUodGltZXpvbmVRdWVyeSwgb3B0aW9ucyksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmICh0YWJsZXNFcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogdGFibGVzRXJyb3IsIHF1ZXJ5OiB0YWJsZXNRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lem9uZUVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB0aW1lem9uZUVycm9yLCBxdWVyeTogdGltZXpvbmVRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWV6b25lID0gdGltZXpvbmVzWzBdPy50aW1lem9uZTtcblxuICAgICAgICBpZiAoIXRpbWV6b25lKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJUaW1lem9uZSBub3QgZm91bmRcIiksIHF1ZXJ5OiB0aW1lem9uZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgcXVlcnk6IHRhYmxlc1F1ZXJ5LCB0YWJsZXMsIHRpbWV6b25lIH0pXTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHF1ZXJ5KF9kZXRhaWxzLCBfb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclF1ZXJ5UmVzdWx0Pj4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfSxcblxuICAgIHVwZGF0ZShfZGV0YWlscywgX29wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJVcGRhdGVSZXN1bHQ+PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnRyb3NwZWN0aW9uKGFyZ3M6IHtcbiAgcXVlcnk6IFF1ZXJ5O1xuICB0YWJsZXM6IFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG4gIHRpbWV6b25lOiBzdHJpbmc7XG59KTogQWRhcHRlckludHJvc3BlY3RSZXN1bHQge1xuICBjb25zdCB7IHF1ZXJ5LCB0YWJsZXMsIHRpbWV6b25lIH0gPSBhcmdzO1xuXG4gIHJldHVybiB0YWJsZXMucmVkdWNlKFxuICAgIChyZXN1bHQsIHRhYmxlKSA9PiB7XG4gICAgICBjb25zdCB7IHNjaGVtYXMgfSA9IHJlc3VsdDtcbiAgICAgIGNvbnN0IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfSA9IHRhYmxlO1xuXG4gICAgICBjb25zdCBjb2x1bW5zUmVjb3JkID0gY29sdW1uc1xuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5wb3NpdGlvbiAtIGIucG9zaXRpb24pXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGNvbHVtbnMsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhdHlwZSwgbmFtZTogY29sdW1uTmFtZSB9ID0gY29sdW1uO1xuXG4gICAgICAgICAgICBjb25zdCBpbmRleE9mUGFyZW50aGVzaXMgPSBkYXRhdHlwZS5pbmRleE9mKFwiKFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHN0cmlwcGVkRGF0YVR5cGUgPSAoaW5kZXhPZlBhcmVudGhlc2lzID4gLTEgPyBkYXRhdHlwZS5zdWJzdHJpbmcoMCwgaW5kZXhPZlBhcmVudGhlc2lzKSA6IGRhdGF0eXBlKVxuICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW5zLFxuICAgICAgICAgICAgICBbY29sdW1uTmFtZV06IHtcbiAgICAgICAgICAgICAgICBkYXRhdHlwZToge1xuICAgICAgICAgICAgICAgICAgLi4uKE1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEFbc3RyaXBwZWREYXRhVHlwZV0gfHwgeyBncm91cDogXCJyYXdcIiB9KSxcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgaXNOYXRpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBzdHJpcHBlZERhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uczpcbiAgICAgICAgICAgICAgICAgICAgc3RyaXBwZWREYXRhVHlwZSA9PT0gXCJlbnVtXCIgPyBkYXRhdHlwZS5zbGljZShgZW51bSgnYC5sZW5ndGgsIC1gJylgLmxlbmd0aCkuc3BsaXQoYCcsJ2ApIDogW10sXG4gICAgICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBma0NvbHVtbjogY29sdW1uLmZrX2NvbHVtbixcbiAgICAgICAgICAgICAgICBma1NjaGVtYTogc2NoZW1hLFxuICAgICAgICAgICAgICAgIGZrVGFibGU6IGNvbHVtbi5ma190YWJsZSxcbiAgICAgICAgICAgICAgICBpc0NvbXB1dGVkOiBCb29sZWFuKGNvbHVtbi5jb21wdXRlZCksXG4gICAgICAgICAgICAgICAgaXNJblByaW1hcnlLZXk6IEJvb2xlYW4oY29sdW1uLnBrKSxcbiAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgIG51bGxhYmxlOiBCb29sZWFuKGNvbHVtbi5udWxsYWJsZSksXG4gICAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgIH0gYXMgY29uc3Qgc2F0aXNmaWVzIENvbHVtbixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7fSBhcyBUYWJsZVtcImNvbHVtbnNcIl0sXG4gICAgICAgICk7XG5cbiAgICAgIGlmIChzY2hlbWFzW3NjaGVtYV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY2hlbWFzW3NjaGVtYV0gPSB7IG5hbWU6IHNjaGVtYSwgdGFibGVzOiB7fSB9O1xuICAgICAgfVxuXG4gICAgICBzY2hlbWFzW3NjaGVtYV0udGFibGVzW3RhYmxlTmFtZV0gPSB7IGNvbHVtbnM6IGNvbHVtbnNSZWNvcmQsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH07XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICB7IGZpbHRlck9wZXJhdG9ycywgcXVlcnksIHNjaGVtYXM6IHt9LCB0aW1lem9uZSB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCBhcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCxcbiAgKTtcbn1cblxuY29uc3QgZmlsdGVyT3BlcmF0b3JzID0gW1xuICBcIj1cIixcbiAgXCIhPVwiLFxuICBcIj5cIixcbiAgXCI+PVwiLFxuICBcIjxcIixcbiAgXCI8PVwiLFxuICBcImlzXCIsXG4gIFwiaXMgbm90XCIsXG4gIFwibGlrZVwiLFxuICBcIm5vdCBsaWtlXCIsXG5dIHNhdGlzZmllcyBGaWx0ZXJPcGVyYXRvcltdO1xuIiwgImltcG9ydCB0eXBlIHsgRGF0YVR5cGUgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5leHBvcnQgY29uc3QgTVlTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQTogUmVjb3JkPHN0cmluZywgUGljazxEYXRhVHlwZSwgXCJncm91cFwiPj4gPSB7XG4gIGJpZ2ludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgYmluYXJ5OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGJpdDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBibG9iOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGNoYXI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgXCJjaGFyIGJpbmFyeVwiOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGRhdGU6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICBkYXRldGltZToge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIGRlYzoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZGVjaW1hbDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZG91YmxlOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBcImRvdWJsZSBwcmVjaXNpb25cIjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZW51bToge1xuICAgIGdyb3VwOiBcImVudW1cIixcbiAgfSxcbiAgZml4ZWQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGZsb2F0OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBnZW9tZXRyeToge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBnZW9tZXRyeWNvbGxlY3Rpb246IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBpbnRlZ2VyOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBqc29uOiB7XG4gICAgZ3JvdXA6IFwianNvblwiLFxuICB9LFxuICBsaW5lc3RyaW5nOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIGxvbmc6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgXCJsb25nIHZhcmNoYXJcIjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBsb25nYmxvYjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBsb25ndGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBsb25ndmFyYmluYXJ5OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGxvbmd2YXJjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIG1lZGl1bWJsb2I6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbWVkaXVtaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBtZWRpdW10ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIG11bHRpbGluZXN0cmluZzoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBtdWx0aXBvaW50OiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIG11bHRpcG9seWdvbjoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBudW1lcmljOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBwb2ludDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBwb2x5Z29uOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIHJlYWw6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi85LjUvZW4vc2V0Lmh0bWxcbiAgICovXG4gIHNldDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBzbWFsbGludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgdGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB0aW1lOiB7XG4gICAgZ3JvdXA6IFwidGltZVwiLFxuICB9LFxuICB0aW1lc3RhbXA6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICB0aW55YmxvYjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB0aW55aW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICB0aW55dGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB2YXJiaW5hcnk6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdmFyY2hhcjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBcInZhcmNoYXIgYmluYXJ5XCI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgLyoqXG4gICAqIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzkuNS9lbi92ZWN0b3IuaHRtbFxuICAgKi9cbiAgdmVjdG9yOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIHllYXI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG59O1xuIiwgImltcG9ydCB7IHNxbCB9IGZyb20gXCJreXNlbHlcIjtcbmltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tIFwia3lzZWx5L2hlbHBlcnMvbXlzcWxcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBjb21waWxlLCB0eXBlIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgeyBnZXRNeVNRTEJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5cbmludGVyZmFjZSBEYXRhYmFzZSB7XG4gIC8qKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi84LjQvZW4vaW5mb3JtYXRpb24tc2NoZW1hLWNvbHVtbnMtdGFibGUuaHRtbCAqL1xuICBcImluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zXCI6IHtcbiAgICBUQUJMRV9TQ0hFTUE6IHN0cmluZztcbiAgICBUQUJMRV9OQU1FOiBzdHJpbmc7XG4gICAgQ09MVU1OX05BTUU6IHN0cmluZztcbiAgICAvKiogVGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4gd2l0aGluIHRoZSB0YWJsZS4gT1JESU5BTF9QT1NJVElPTiBpcyBuZWNlc3NhcnkgYmVjYXVzZSB5b3UgbWlnaHQgd2FudCB0byBzYXkgT1JERVIgQlkgT1JESU5BTF9QT1NJVElPTi4gVW5saWtlIFNIT1cgQ09MVU1OUywgU0VMRUNUIGZyb20gdGhlIENPTFVNTlMgdGFibGUgZG9lcyBub3QgaGF2ZSBhdXRvbWF0aWMgb3JkZXJpbmcuICovXG4gICAgT1JESU5BTF9QT1NJVElPTjogbnVtYmVyO1xuICAgIC8qKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbHVtbi4gVGhpcyBpcyBOVUxMIGlmIHRoZSBjb2x1bW4gaGFzIGFuIGV4cGxpY2l0IGRlZmF1bHQgb2YgTlVMTCwgb3IgaWYgdGhlIGNvbHVtbiBkZWZpbml0aW9uIGluY2x1ZGVzIG5vIERFRkFVTFQgY2xhdXNlLiAqL1xuICAgIENPTFVNTl9ERUZBVUxUOiB1bmtub3duO1xuICAgIElTX05VTExBQkxFOiBcIllFU1wiIHwgXCJOT1wiO1xuICAgIC8qKiBDb250YWlucyB0aGUgdHlwZSBuYW1lIGFuZCBwb3NzaWJseSBvdGhlciBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBwcmVjaXNpb24gb3IgbGVuZ3RoLiAqL1xuICAgIENPTFVNTl9UWVBFOiBzdHJpbmc7XG4gICAgLyoqIGVtcHR5IC0gbm90IGluZGV4ZWQgb3IgaXMgc2Vjb25kYXJ5IGNvbHVtbiBpbiBhIG11bHRpLWNvbHVtbiBub251bmlxdWUgaW5kZXguIFBSSSAtIHBhcnQgb2YgYSBwcmltYXJ5IGtleS4gVU5JIC0gZmlyc3QgY29sdW1uIG9mIGEgdW5pcXVlIGluZGV4LiBNVUwgLSBmaXJzdCBjb2x1bW4gb2YgYSBub251bmlxdWUgaW5kZXggKi9cbiAgICBDT0xVTU5fS0VZOiBcIlwiIHwgXCJQUklcIiB8IFwiVU5JXCIgfCBcIk1VTFwiO1xuICAgIC8qKiBFeHRyYSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29sdW1uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlICovXG4gICAgRVhUUkE6XG4gICAgICB8IFwiXCJcbiAgICAgIHwgXCJhdXRvX2luY3JlbWVudFwiXG4gICAgICB8IFwib24gdXBkYXRlIENVUlJFTlRfVElNRVNUQU1QXCJcbiAgICAgIHwgXCJTVE9SRUQgR0VORVJBVEVEXCJcbiAgICAgIHwgXCJWSVJUVUFMIEdFTkVSQVRFRFwiXG4gICAgICB8IFwiREVGQVVMVCBHRU5FUkFURURcIjtcbiAgICAvKiogRm9yIGdlbmVyYXRlZCBjb2x1bW5zLCBkaXNwbGF5cyB0aGUgZXhwcmVzc2lvbiB1c2VkIHRvIGNvbXB1dGUgY29sdW1uIHZhbHVlcy4gRW1wdHkgZm9yIG5vbmdlbmVyYXRlZCBjb2x1bW5zLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgZ2VuZXJhdGVkIGNvbHVtbnMsIHNlZSBTZWN0aW9uIDE1LjEuMjAuOCwgXHUyMDFDQ1JFQVRFIFRBQkxFIGFuZCBHZW5lcmF0ZWQgQ29sdW1uc1x1MjAxRC4gKi9cbiAgICBHRU5FUkFUSU9OX0VYUFJFU1NJT046IHN0cmluZztcbiAgfTtcblxuICAvKiogaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOC40L2VuL2luZm9ybWF0aW9uLXNjaGVtYS10YWJsZXMtdGFibGUuaHRtbCAqL1xuICBcImluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXNcIjoge1xuICAgIC8qKiBUaGUgbmFtZSBvZiB0aGUgc2NoZW1hIChkYXRhYmFzZSkgdG8gd2hpY2ggdGhlIHRhYmxlIGJlbG9uZ3MuICovXG4gICAgVEFCTEVfU0NIRU1BOiBzdHJpbmc7XG4gICAgVEFCTEVfTkFNRTogc3RyaW5nO1xuICAgIC8qKiBCQVNFIFRBQkxFIGZvciBhIHRhYmxlLCBWSUVXIGZvciBhIHZpZXcsIG9yIFNZU1RFTSBWSUVXIGZvciBhbiBJTkZPUk1BVElPTl9TQ0hFTUEgdGFibGUuICovXG4gICAgVEFCTEVfVFlQRTogXCJCQVNFIFRBQkxFXCIgfCBcIlZJRVdcIiB8IFwiU1lTVEVNIFZJRVdcIjtcbiAgfTtcblxuICAvKiogaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOC40L2VuL2luZm9ybWF0aW9uLXNjaGVtYS1rZXktY29sdW1uLXVzYWdlLXRhYmxlLmh0bWwgKi9cbiAgXCJpbmZvcm1hdGlvbl9zY2hlbWEuS0VZX0NPTFVNTl9VU0FHRVwiOiB7XG4gICAgQ09OU1RSQUlOVF9TQ0hFTUE6IHN0cmluZztcbiAgICBDT05TVFJBSU5UX05BTUU6IHN0cmluZztcbiAgICBUQUJMRV9TQ0hFTUE6IHN0cmluZztcbiAgICBUQUJMRV9OQU1FOiBzdHJpbmc7XG4gICAgQ09MVU1OX05BTUU6IHN0cmluZztcbiAgICAvKiogbnVsbCAtIHdoZW4gdW5pcXVlIG9yIHByaW1hcnkga2V5IGNvbnN0cmFpbnQuIDEtbiAtIHdoZW4gZm9yZWlnbiBrZXkgY29uc3RyYWludCAqL1xuICAgIFBPU0lUSU9OX0lOX1VOSVFVRV9DT05TVFJBSU5UOiBudW1iZXIgfCBudWxsO1xuICAgIFJFRkVSRU5DRURfVEFCTEVfU0NIRU1BOiBzdHJpbmc7XG4gICAgUkVGRVJFTkNFRF9UQUJMRV9OQU1FOiBzdHJpbmc7XG4gICAgUkVGRVJFTkNFRF9DT0xVTU5fTkFNRTogc3RyaW5nO1xuICB9O1xuXG4gIC8qKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi84LjQvZW4vaW5mb3JtYXRpb24tc2NoZW1hLXRhYmxlLWNvbnN0cmFpbnRzLXRhYmxlLmh0bWwgKi9cbiAgXCJpbmZvcm1hdGlvbl9zY2hlbWEuVEFCTEVfQ09OU1RSQUlOVFNcIjoge1xuICAgIENPTlNUUkFJTlRfU0NIRU1BOiBzdHJpbmc7XG4gICAgQ09OU1RSQUlOVF9OQU1FOiBzdHJpbmc7XG4gICAgVEFCTEVfU0NIRU1BOiBzdHJpbmc7XG4gICAgVEFCTEVfTkFNRTogc3RyaW5nO1xuICAgIENPTlNUUkFJTlRfVFlQRTogXCJQUklNQVJZIEtFWVwiIHwgXCJGT1JFSUdOIEtFWVwiIHwgXCJVTklRVUVcIiB8IFwiQ0hFQ0tcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlc1F1ZXJ5KHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4pIHtcbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgZ2V0TXlTUUxCdWlsZGVyPERhdGFiYXNlPihyZXF1aXJlbWVudHMpXG4gICAgICAuc2VsZWN0RnJvbShcImluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgYXMgdFwiKVxuICAgICAgLndoZXJlKFwidC5UQUJMRV9TQ0hFTUFcIiwgXCI9XCIsIHNxbDxzdHJpbmc+YGRhdGFiYXNlKClgKVxuICAgICAgLndoZXJlKFwidC5UQUJMRV9UWVBFXCIsIFwiaW5cIiwgW1wiQkFTRSBUQUJMRVwiLCBcIlZJRVdcIl0pXG4gICAgICAuc2VsZWN0KFtcInQuVEFCTEVfU0NIRU1BIGFzIHNjaGVtYVwiLCBcInQuVEFCTEVfTkFNRSBhcyBuYW1lXCIsIFwidC5UQUJMRV9UWVBFIGFzIHR5cGVcIl0pXG4gICAgICAuJG5hcnJvd1R5cGU8eyB0eXBlOiBcIkJBU0UgVEFCTEVcIiB8IFwiVklFV1wiIH0+KClcbiAgICAgIC5zZWxlY3QoKGViKSA9PlxuICAgICAgICAvLyBganNvbl9hcnJheWFnZ2AgaWdub3JlcyBgb3JkZXIgYnlgIGluc2lkZSB0aGUgc3VicXVlcnksIHNvIHdlIG5lZWQgdG8gb3JkZXIgYWZ0ZXIgYWdncmVnYXRpb24uXG4gICAgICAgIGpzb25BcnJheUZyb20oXG4gICAgICAgICAgZWJcbiAgICAgICAgICAgIC5zZWxlY3RGcm9tKFwiaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgYXMgY1wiKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwiaW5mb3JtYXRpb25fc2NoZW1hLktFWV9DT0xVTU5fVVNBR0UgYXMga2N1XCIsIChqYikgPT5cbiAgICAgICAgICAgICAgamJcbiAgICAgICAgICAgICAgICAub25SZWYoXCJrY3UuVEFCTEVfU0NIRU1BXCIsIFwiPVwiLCBcImMuVEFCTEVfU0NIRU1BXCIpXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwia2N1LlRBQkxFX05BTUVcIiwgXCI9XCIsIFwiYy5UQUJMRV9OQU1FXCIpXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwia2N1LkNPTFVNTl9OQU1FXCIsIFwiPVwiLCBcImMuQ09MVU1OX05BTUVcIilcbiAgICAgICAgICAgICAgICAvLyBvbmx5IGdldCBmb3JlaWduIGtleSBjb25zdHJhaW50c1xuICAgICAgICAgICAgICAgIC5vbihcImtjdS5QT1NJVElPTl9JTl9VTklRVUVfQ09OU1RSQUlOVFwiLCBcImlzIG5vdFwiLCBudWxsKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC53aGVyZVJlZihcImMuVEFCTEVfU0NIRU1BXCIsIFwiPVwiLCBcInQuVEFCTEVfU0NIRU1BXCIpXG4gICAgICAgICAgICAud2hlcmVSZWYoXCJjLlRBQkxFX05BTUVcIiwgXCI9XCIsIFwidC5UQUJMRV9OQU1FXCIpXG4gICAgICAgICAgICAuc2VsZWN0KFtcbiAgICAgICAgICAgICAgXCJjLkNPTFVNTl9OQU1FIGFzIG5hbWVcIixcbiAgICAgICAgICAgICAgXCJjLkNPTFVNTl9UWVBFIGFzIGRhdGF0eXBlXCIsXG4gICAgICAgICAgICAgIFwiYy5PUkRJTkFMX1BPU0lUSU9OIGFzIHBvc2l0aW9uXCIsXG4gICAgICAgICAgICAgIFwia2N1LlJFRkVSRU5DRURfVEFCTEVfTkFNRSBhcyBma190YWJsZVwiLFxuICAgICAgICAgICAgICBcImtjdS5SRUZFUkVOQ0VEX0NPTFVNTl9OQU1FIGFzIGZrX2NvbHVtblwiLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgICAgICAgIGViKFwiYy5FWFRSQVwiLCBcIj1cIiwgXCJhdXRvX2luY3JlbWVudFwiKS5hcyhcImF1dG9pbmNyZW1lbnRcIiksXG4gICAgICAgICAgICAgIGViKFwiYy5FWFRSQVwiLCBcImluXCIsIFtcIm9uIHVwZGF0ZSBDVVJSRU5UX1RJTUVTVEFNUFwiLCBcIlNUT1JFRCBHRU5FUkFURURcIiwgXCJWSVJUVUFMIEdFTkVSQVRFRFwiXSkuYXMoXG4gICAgICAgICAgICAgICAgXCJjb21wdXRlZFwiLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBlYihcImMuQ09MVU1OX0tFWVwiLCBcIj1cIiwgXCJQUklcIikuYXMoXCJwa1wiKSxcbiAgICAgICAgICAgICAgZWIoXCJjLklTX05VTExBQkxFXCIsIFwiPVwiLCBcIllFU1wiKS5hcyhcIm51bGxhYmxlXCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICkuYXMoXCJjb2x1bW5zXCIpLFxuICAgICAgKVxuICAgICAgLm9yZGVyQnkoXCJ0LlRBQkxFX1NDSEVNQVwiKVxuICAgICAgLm9yZGVyQnkoXCJ0LlRBQkxFX05BTUVcIilcbiAgICAgIC5vcmRlckJ5KFwidC5UQUJMRV9UWVBFXCIpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RhYmxlc1F1ZXJ5KCk6IFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT4ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiaW50XCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBudWxsYWJsZTogMCxcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBwb3NpdGlvbjogMSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiYmluYXJ5KDE2KVwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcInV1aWRcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBwb3NpdGlvbjogMixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidmFyY2hhcigyNTUpXCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIHBvc2l0aW9uOiAzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMSxcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwiaWRfbmFtZVwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIHBvc2l0aW9uOiA0LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG5hbWU6IFwiYW5pbWFsc1wiLFxuICAgICAgc2NoZW1hOiBcInN0dWRpb1wiLFxuICAgICAgdHlwZTogXCJCQVNFIFRBQkxFXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImludFwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgcG9zaXRpb246IDEsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcImNyZWF0ZWRfYXRcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBwb3NpdGlvbjogMixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiZW51bSgnYWRtaW4nLCdtYWludGFpbmVyJywnbWVtYmVyJylcIixcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJyb2xlXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgcG9zaXRpb246IDMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImludFwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogXCJpZFwiLFxuICAgICAgICAgIGZrX3RhYmxlOiBcImFuaW1hbHNcIixcbiAgICAgICAgICBuYW1lOiBcImFuaW1hbF9pZFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIHBvc2l0aW9uOiA0LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG5hbWU6IFwidXNlcnNcIixcbiAgICAgIHNjaGVtYTogXCJzdHVkaW9cIixcbiAgICAgIHR5cGU6IFwiQkFTRSBUQUJMRVwiLFxuICAgIH0sXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lem9uZVF1ZXJ5KHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4pIHtcbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcihyZXF1aXJlbWVudHMpO1xuXG4gIGNvbnN0IHNlc3Npb25UeiA9IHNxbDxcIlNZU1RFTVwiIHwgKHN0cmluZyAmIHt9KT5gQEBzZXNzaW9uLnRpbWVfem9uZWA7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLnNlbGVjdE5vRnJvbShcbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC5jYXNlKClcbiAgICAgICAgICAud2hlbihzZXNzaW9uVHosIFwiPVwiLCBcIlNZU1RFTVwiKVxuICAgICAgICAgIC50aGVuKHNxbDxzdHJpbmc+YEBAc3lzdGVtX3RpbWVfem9uZWApXG4gICAgICAgICAgLmVsc2Uoc2Vzc2lvblR6KVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC5hcyhcInRpbWV6b25lXCIpLFxuICAgICAgKVxuICAgICAgLiRuYXJyb3dUeXBlPHsgdGltZXpvbmU6IHN0cmluZyB9PigpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RpbWV6b25lUXVlcnkoKTogUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRpbWV6b25lUXVlcnk+IHtcbiAgcmV0dXJuIFt7IHRpbWV6b25lOiBcIlVUQ1wiIH1dO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9teXNxbC5kLnRzXCIgLz5cbmltcG9ydCB7IHNxbCB9IGZyb20gJy4uL3Jhdy1idWlsZGVyL3NxbC5qcyc7XG5pbXBvcnQgeyBnZXRKc29uT2JqZWN0QXJncyB9IGZyb20gJy4uL3V0aWwvanNvbi1vYmplY3QtYXJncy5qcyc7XG4vKipcbiAqIEEgTXlTUUwgaGVscGVyIGZvciBhZ2dyZWdhdGluZyBhIHN1YnF1ZXJ5IGludG8gYSBKU09OIGFycmF5LlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBmdWxseSB3b3JrIHdpdGggdGhlIGJ1aWx0LWluIGBNeXNxbERpYWxlY3RgLlxuICogV2hpbGUgdGhlIHByb2R1Y2VkIFNRTCBpcyBjb21wYXRpYmxlIHdpdGggYWxsIE15U1FMIGRhdGFiYXNlcywgc29tZSB0aGlyZC1wYXJ0eSBkaWFsZWN0c1xuICogbWF5IG5vdCBwYXJzZSB0aGUgbmVzdGVkIEpTT04gaW50byBhcnJheXMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvbXlzcWwnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQXJyYXlGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAub3JkZXJCeSgncGV0Lm5hbWUnKVxuICogICAgICkuYXMoJ3BldHMnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5wZXRzWzBdPy5wZXRfaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXT8ubmFtZVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBgaWRgLCAoXG4gKiAgIHNlbGVjdCBjYXN0KGNvYWxlc2NlKGpzb25fYXJyYXlhZ2coanNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIGBhZ2dgLmBwZXRfaWRgLFxuICogICAgICduYW1lJywgYGFnZ2AuYG5hbWVgXG4gKiAgICkpLCAnW10nKSBhcyBqc29uKSBmcm9tIChcbiAqICAgICBzZWxlY3QgYHBldGAuYGlkYCBhcyBgcGV0X2lkYCwgYHBldGAuYG5hbWVgXG4gKiAgICAgZnJvbSBgcGV0YFxuICogICAgIHdoZXJlIGBwZXRgLmBvd25lcl9pZGAgPSBgcGVyc29uYC5gaWRgXG4gKiAgICAgb3JkZXIgYnkgYHBldGAuYG5hbWVgXG4gKiAgICkgYXMgYGFnZ2BcbiAqICkgYXMgYHBldHNgXG4gKiBmcm9tIGBwZXJzb25gXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25BcnJheUZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QgY2FzdChjb2FsZXNjZShqc29uX2FycmF5YWdnKGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0TXlzcWxKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnYWdnJykpfSkpLCAnW10nKSBhcyBqc29uKSBmcm9tICR7ZXhwcn0gYXMgYWdnKWA7XG59XG4vKipcbiAqIEEgTXlTUUwgaGVscGVyIGZvciB0dXJuaW5nIGEgc3VicXVlcnkgaW50byBhIEpTT04gb2JqZWN0LlxuICpcbiAqIFRoZSBzdWJxdWVyeSBtdXN0IG9ubHkgcmV0dXJuIG9uZSByb3cuXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgaXMgb25seSBndWFyYW50ZWVkIHRvIGZ1bGx5IHdvcmsgd2l0aCB0aGUgYnVpbHQtaW4gYE15c3FsRGlhbGVjdGAuXG4gKiBXaGlsZSB0aGUgcHJvZHVjZWQgU1FMIGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgTXlTUUwgZGF0YWJhc2VzLCBzb21lIHRoaXJkLXBhcnR5IGRpYWxlY3RzXG4gKiBtYXkgbm90IHBhcnNlIHRoZSBuZXN0ZWQgSlNPTiBpbnRvIG9iamVjdHMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uT2JqZWN0RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL215c3FsJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbk9iamVjdEZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC53aGVyZSgncGV0LmlzX2Zhdm9yaXRlJywgJz0nLCB0cnVlKVxuICogICAgICkuYXMoJ2Zhdm9yaXRlX3BldCcpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/LmZhdm9yaXRlX3BldD8ucGV0X2lkXG4gKiByZXN1bHRbMF0/LmZhdm9yaXRlX3BldD8ubmFtZVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBgaWRgLCAoXG4gKiAgIHNlbGVjdCBqc29uX29iamVjdChcbiAqICAgICAncGV0X2lkJywgYG9iamAuYHBldF9pZGAsXG4gKiAgICAgJ25hbWUnLCBgb2JqYC5gbmFtZWBcbiAqICAgKSBmcm9tIChcbiAqICAgICBzZWxlY3QgYHBldGAuYGlkYCBhcyBgcGV0X2lkYCwgYHBldGAuYG5hbWVgXG4gKiAgICAgZnJvbSBgcGV0YFxuICogICAgIHdoZXJlIGBwZXRgLmBvd25lcl9pZGAgPSBgcGVyc29uYC5gaWRgXG4gKiAgICAgYW5kIGBwZXRgLmBpc19mYXZvcml0ZWAgPSA/XG4gKiAgICkgYXMgb2JqXG4gKiApIGFzIGBmYXZvcml0ZV9wZXRgXG4gKiBmcm9tIGBwZXJzb25gXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25PYmplY3RGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0TXlzcWxKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnb2JqJykpfSkgZnJvbSAke2V4cHJ9IGFzIG9iailgO1xufVxuLyoqXG4gKiBUaGUgTXlTUUwgYGpzb25fb2JqZWN0YCBmdW5jdGlvbi5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gZnVsbHkgd29yayB3aXRoIHRoZSBidWlsdC1pbiBgTXlzcWxEaWFsZWN0YC5cbiAqIFdoaWxlIHRoZSBwcm9kdWNlZCBTUUwgaXMgY29tcGF0aWJsZSB3aXRoIGFsbCBNeVNRTCBkYXRhYmFzZXMsIHNvbWUgdGhpcmQtcGFydHkgZGlhbGVjdHNcbiAqIG1heSBub3QgcGFyc2UgdGhlIG5lc3RlZCBKU09OIGludG8gb2JqZWN0cy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluXG4gKiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAgdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkJ1aWxkT2JqZWN0KHtcbiAqICAgICAgIGZpcnN0OiBlYi5yZWYoJ2ZpcnN0X25hbWUnKSxcbiAqICAgICAgIGxhc3Q6IGViLnJlZignbGFzdF9uYW1lJyksXG4gKiAgICAgICBmdWxsOiBlYi5mbignY29uY2F0JywgWydmaXJzdF9uYW1lJywgZWIudmFsKCcgJyksICdsYXN0X25hbWUnXSlcbiAqICAgICB9KS5hcygnbmFtZScpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/Lm5hbWUuZmlyc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5sYXN0XG4gKiByZXN1bHRbMF0/Lm5hbWUuZnVsbFxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIGpzb25fb2JqZWN0KFxuICogICAnZmlyc3QnLCBmaXJzdF9uYW1lLFxuICogICAnbGFzdCcsIGxhc3RfbmFtZSxcbiAqICAgJ2Z1bGwnLCBjb25jYXQoYGZpcnN0X25hbWVgLCA/LCBgbGFzdF9uYW1lYClcbiAqICkgYXMgXCJuYW1lXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQnVpbGRPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIHNxbCBganNvbl9vYmplY3QoJHtzcWwuam9pbihPYmplY3Qua2V5cyhvYmopLmZsYXRNYXAoKGspID0+IFtzcWwubGl0KGspLCBvYmpba11dKSl9KWA7XG59XG5mdW5jdGlvbiBnZXRNeXNxbEpzb25PYmplY3RBcmdzKG5vZGUsIHRhYmxlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGdldEpzb25PYmplY3RBcmdzKG5vZGUsIHRhYmxlKTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ015U1FMIGpzb25BcnJheUZyb20gYW5kIGpzb25PYmplY3RGcm9tIGZ1bmN0aW9ucyBjYW4gb25seSBoYW5kbGUgZXhwbGljaXQgc2VsZWN0aW9ucyBkdWUgdG8gbGltaXRhdGlvbnMgb2YgdGhlIGpzb25fb2JqZWN0IGZ1bmN0aW9uLiBzZWxlY3RBbGwoKSBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc3VicXVlcnkuJyk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IHR5cGUgS3lzZWx5LCBNeXNxbEFkYXB0ZXIsIE15c3FsUXVlcnlDb21waWxlciB9IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBnZXRCdWlsZGVyIH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gZ2V0TXlTUUxCdWlsZGVyPERhdGFiYXNlID0gYW55PihcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbik6IEt5c2VseTxEYXRhYmFzZT4ge1xuICByZXR1cm4gZ2V0QnVpbGRlcih7IC4uLnJlcXVpcmVtZW50cywgQWRhcHRlcjogTXlzcWxBZGFwdGVyLCBRdWVyeUNvbXBpbGVyOiBNeXNxbFF1ZXJ5Q29tcGlsZXIgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBZGFwdGVyRGVsZXRlRGV0YWlscywgQWRhcHRlckluc2VydERldGFpbHMsIEFkYXB0ZXJRdWVyeURldGFpbHMsIEFkYXB0ZXJVcGRhdGVEZXRhaWxzIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclJlcXVpcmVtZW50cyB9IGZyb20gXCIuLi9xdWVyeVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlUXVlcnkoXG4gIF9kZXRhaWxzOiBBZGFwdGVyRGVsZXRlRGV0YWlscyxcbiAgX3JlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0UXVlcnkoXG4gIF9kZXRhaWxzOiBBZGFwdGVySW5zZXJ0RGV0YWlscyxcbiAgX3JlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0UXVlcnkoXG4gIF9kZXRhaWxzOiBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICBfcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcGRhdGVRdWVyeShcbiAgX2RldGFpbHM6IEFkYXB0ZXJVcGRhdGVEZXRhaWxzLFxuICBfcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozt3UEFBQUEsSUNBQUMsSUNBQUMsSUFFTyxJQUFNQyxFQUF3RSxDQUNuRixPQUFRLENBQ04sTUFBTyxTQUNULEVBQ0EsT0FBUSxDQUNOLE1BQU8sUUFDVCxFQUNBLElBQUssQ0FDSCxNQUFPLEtBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxRQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sUUFDVCxFQUNBLGNBQWUsQ0FDYixNQUFPLFFBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxVQUNULEVBQ0EsU0FBVSxDQUNSLE1BQU8sVUFDVCxFQUNBLElBQUssQ0FDSCxNQUFPLFNBQ1QsRUFDQSxRQUFTLENBQ1AsTUFBTyxTQUNULEVBQ0EsT0FBUSxDQUNOLE1BQU8sU0FDVCxFQUNBLG1CQUFvQixDQUNsQixNQUFPLFNBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxNQUNULEVBQ0EsTUFBTyxDQUNMLE1BQU8sU0FDVCxFQUNBLE1BQU8sQ0FDTCxNQUFPLFNBQ1QsRUFDQSxTQUFVLENBQ1IsTUFBTyxLQUNULEVBQ0EsbUJBQW9CLENBQ2xCLE1BQU8sS0FDVCxFQUNBLElBQUssQ0FDSCxNQUFPLFNBQ1QsRUFDQSxRQUFTLENBQ1AsTUFBTyxTQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sTUFDVCxFQUNBLFdBQVksQ0FDVixNQUFPLEtBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxRQUNULEVBQ0EsZUFBZ0IsQ0FDZCxNQUFPLFFBQ1QsRUFDQSxTQUFVLENBQ1IsTUFBTyxRQUNULEVBQ0EsU0FBVSxDQUNSLE1BQU8sUUFDVCxFQUNBLGNBQWUsQ0FDYixNQUFPLFFBQ1QsRUFDQSxZQUFhLENBQ1gs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QUFNLEtBQUssRUFBSSxDQUFDLEVBQzlGLE9BQUFMLENBQ0YsRUFDQSxTQUFVSSxFQUFPLFVBQ2pCLFNBQVVKLEVBQ1YsUUFBU0ksRUFBTyxTQUNoQixXQUFZLEVBQVFBLEVBQU8sU0FDM0IsZUFBZ0IsRUFBUUEsRUFBTyxHQUMvQixLQUFNRSxFQUNOLFNBQVUsRUFBUUYsRUFBTyxTQUN6QixPQUFBSixFQUNBLE1BQU9ELENBQ1QsQ0FDRixDQUNGLEVBQ0EsQ0FBQyxDQUNILEVBRUYsT0FBSUYsRUFBUUcsQ0FBTSxJQUFNLFNBQ3RCSCxFQUFRRyxDQUFNLEVBQUksQ0FBRSxLQUFNQSxFQUFRLE9BQVEsQ0FBQyxDQUFFLEdBRy9DSCxFQUFRRyxDQUFNLEVBQUUsT0FBT0QsQ0FBUyxFQUFJLENBQUUsUUFBU0UsRUFBZSxLQUFNRixFQUFXLE9BQUFDLENBQU8sRUFFL0VMLENBQ1QsRUFDQSxDQUFFLGdCQUFBZSxFQUFpQixNQUFBaEIsRUFBTyxRQUFTLENBQUMsRUFBRyxTQUFBSixDQUFTLENBQ2xELENBQ0YsQ0FFQSxJQUFNb0IsRUFBa0IsQ0FDdEIsSUFDQSxLQUNBLElBQ0EsS0FDQSxJQUNBLEtBQ0EsS0FDQSxTQUNBLE9BQ0EsVUFDRixFS2xKQUMsSUFHTyxTQUFTQyxHQUNkQyxFQUNBQyxFQUNBLENBQ0EsTUFBTSxJQUFJLE1BQU0saUJBQWlCLENBQ25DLENBRU8sU0FBU0MsR0FDZEYsRUFDQUMsRUFDQSxDQUNBLE1BQU0sSUFBSSxNQUFNLGlCQUFpQixDQUNuQyxDQUVPLFNBQVNFLEdBQ2RILEVBQ0FDLEVBQ0EsQ0FDQSxNQUFNLElBQUksTUFBTSxpQkFBaUIsQ0FDbkMsQ0FFTyxTQUFTRyxHQUNkSixFQUNBQyxFQUNBLENBQ0EsTUFBTSxJQUFJLE1BQU0saUJBQWlCLENBQ25DIiwKICAibmFtZXMiOiBbImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIk1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAianNvbkFycmF5RnJvbSIsICJleHByIiwgInNxbCIsICJnZXRNeXNxbEpzb25PYmplY3RBcmdzIiwgImdldE15c3FsSnNvbk9iamVjdEFyZ3MiLCAibm9kZSIsICJ0YWJsZSIsICJnZXRKc29uT2JqZWN0QXJncyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJnZXRNeVNRTEJ1aWxkZXIiLCAicmVxdWlyZW1lbnRzIiwgImdldEJ1aWxkZXIiLCAiTXlzcWxBZGFwdGVyIiwgIk15c3FsUXVlcnlDb21waWxlciIsICJnZXRUYWJsZXNRdWVyeSIsICJyZXF1aXJlbWVudHMiLCAiY29tcGlsZSIsICJnZXRNeVNRTEJ1aWxkZXIiLCAic3FsIiwgImViIiwgImpzb25BcnJheUZyb20iLCAiamIiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgImdldFRpbWV6b25lUXVlcnkiLCAiYnVpbGRlciIsICJzZXNzaW9uVHoiLCAibW9ja1RpbWV6b25lUXVlcnkiLCAiY3JlYXRlTXlTUUxBZGFwdGVyIiwgInJlcXVpcmVtZW50cyIsICJleGVjdXRvciIsICJfb3RoZXJSZXF1aXJlbWVudHMiLCAiX2RldGFpbHMiLCAiX29wdGlvbnMiLCAib3B0aW9ucyIsICJ0YWJsZXNRdWVyeSIsICJnZXRUYWJsZXNRdWVyeSIsICJ0aW1lem9uZVF1ZXJ5IiwgImdldFRpbWV6b25lUXVlcnkiLCAidGFibGVzRXJyb3IiLCAidGFibGVzIiwgInRpbWV6b25lRXJyb3IiLCAidGltZXpvbmVzIiwgImNyZWF0ZUFkYXB0ZXJFcnJvciIsICJ0aW1lem9uZSIsICJjcmVhdGVJbnRyb3NwZWN0aW9uIiwgImVycm9yIiwgImFyZ3MiLCAicXVlcnkiLCAicmVzdWx0IiwgInRhYmxlIiwgInNjaGVtYXMiLCAiY29sdW1ucyIsICJ0YWJsZU5hbWUiLCAic2NoZW1hIiwgImNvbHVtbnNSZWNvcmQiLCAiYSIsICJiIiwgImNvbHVtbiIsICJkYXRhdHlwZSIsICJjb2x1bW5OYW1lIiwgImluZGV4T2ZQYXJlbnRoZXNpcyIsICJzdHJpcHBlZERhdGFUeXBlIiwgIk1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEiLCAiZmlsdGVyT3BlcmF0b3JzIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImdldERlbGV0ZVF1ZXJ5IiwgIl9kZXRhaWxzIiwgIl9yZXF1aXJlbWVudHMiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAiZ2V0U2VsZWN0UXVlcnkiLCAiZ2V0VXBkYXRlUXVlcnkiXQp9Cg==