@prisma/studio-core 0.8.0 → 0.8.1

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.
@@ -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 q}from"../../chunk-32BUC7NR.js";import{a as u}from"../../chunk-O6ZAHVDF.js";import{h as k,i as p,j as Q,k as h,p as x,r as f,s as T,v as w}from"../../chunk-A6CVKSUD.js";import{e as s}from"../../chunk-GDQBQ7MK.js";s();s();s();var B={BLOB:{group:"raw"},INTEGER:{group:"numeric"},NULL:{group:"raw"},NUMERIC:{group:"numeric"},REAL:{group:"numeric"},TEXT:{group:"string"}};function O(r){if(!r)return"BLOB";let t=r.toUpperCase();return t.includes("INT")?"INTEGER":t.includes("TEXT")||t.includes("CHAR")||t.includes("CLOB")?"TEXT":t.includes("BLOB")?"BLOB":t.includes("REAL")||t.includes("FLOA")||t.includes("DOUB")?"REAL":"NUMERIC"}s();s();function y(r){return x({...r,Adapter:h,QueryCompiler:Q})}function L(r,t){let{filter:l={after:"and",filters:[],kind:"FilterGroup"},pageIndex:o,pageSize:n,sortOrder:e,table:{columns:a,name:i}}=r,c=y(t),b=w(l.filters,a),d=c.selectFrom(i).where(b).select(m=>m.cast(m.fn.coalesce(m.fn.countAll(),p.lit(0)),"text").as("value"));return f(c.with("count",()=>d).selectFrom([i,"count"]).where(b).select(p.ref("count.value").as("__ps_count__")).select(Object.keys(a)).$call(m=>e.reduce((A,g)=>A.orderBy(g.column,g.direction),m)).limit(n).offset(p.lit(BigInt(o)*BigInt(n))))}function H(){return[{created_at:new Date("2025-01-26T21:56:12.345Z"),deleted_at:null,id:1,name:"John Doe",__ps_count__:"2",role:"admin",name_role:"Jonn Doe - admin"},{created_at:new Date("2025-01-26T20:56:12.345Z"),deleted_at:null,id:2,name:"Jane Doe",__ps_count__:"2",role:"poweruser",name_role:"Jane Doe - poweruser"}]}function j(r,t){let{rows:l,table:{columns:o,name:n}}=r,e=y(t);return f(e.deleteFrom(n).$call(T(l,o)).returning(Object.keys(o)).returning(E().as("__ps_deleted_at__")))}function D(r,t){let{table:{columns:l,name:o},rows:n}=r,e=y(t);return f(e.insertInto(o).values(n.map(a=>Object.keys(a).length===0?{[Object.keys(l)[0]]:null}:a)).returning(Object.keys(l)).returning(E().as("__ps_inserted_at__")))}function S(r,t){let{changes:l,row:o,table:{columns:n,name:e}}=r,a=y(t);return f(a.updateTable(e).set(l).$call(T([o],n)).returning(Object.keys(n)).returning(E().as("__ps_updated_at__")))}function E(){let r=k();return r.cast(r.cast(p`(julianday('now') - 2440587.5) * 86400000.0`,"integer"),"text")}s();s();function C(r){return p`(select coalesce(json_group_array(json_object(${p.join(P(r.toOperationNode(),"agg"))})), '[]') from ${r} as agg)`}function P(r,t){try{return q(r,t)}catch{throw new Error("SQLite 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 F(r){return f(y(r).selectFrom(k().fn("pragma_table_list",[]).as("tl")).leftJoin("sqlite_schema as ss",t=>t.onRef("ss.type","=","tl.type").onRef("ss.name","=","tl.name")).where("tl.type","in",["table","view"]).where("tl.schema","=","main").where("tl.name","not like","sqlite_%").select(["tl.name","ss.sql"]).select(t=>[C(t.selectFrom(t.fn("pragma_table_xinfo",["tl.name"]).as("txi")).leftJoin(t.fn("pragma_foreign_key_list",["tl.name"]).as("fkl"),"fkl.from","txi.name").where("txi.hidden","!=",1).select(["txi.name","txi.type as datatype","fkl.table as fk_table","fkl.to as fk_column"]).select(l=>[l("txi.hidden","in",[2,3]).as("computed"),l("txi.notnull","!=",0).as("nullable"),l("txi.pk","!=",0).as("pk")])).as("columns")]),{transformations:{columns:"json-parse"}})}function U(){return[{name:"animals",sql:"CREATE TABLE animals (id INTEGER PRIMARY KEY, name TEXT);",columns:[{name:"id",datatype:"INTEGER",pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"name",datatype:"TEXT",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]},{name:"users",sql:"CREATE TABLE users (id UUID PRIMARY KEY, created_at TIMESTAMP, deleted_at TIMESTAMP, role varchar, name varchar, name_role text);",columns:[{name:"id",datatype:"UUID",pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"created_at",datatype:"TIMESTAMP",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"deleted_at",datatype:"TIMESTAMP",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"role",datatype:"varchar",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"name",datatype:"varchar",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"name_role",datatype:"text",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]},{name:"composite_pk",sql:"CREATE TABLE composite_pk (id UUID, name TEXT, created_at timestamp, PRIMARY KEY (id, name));",columns:[{name:"id",datatype:"UUID",pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"name",datatype:"TEXT",pk:1,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"created_at",datatype:"timestamp",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]}]}var R="main",M=["=","!=",">",">=","<","<=","is","is not","like","not like"];function fe(r){let{executor:t,...l}=r;return{defaultSchema:R,async delete(o,n){try{let e=j(o,l),[a]=await t.execute(e,n);return a?u({error:a,query:e}):[null,{...o,query:e}]}catch(e){return u({error:e})}},async insert(o,n){try{let e=D(o,l),[a,i]=await t.execute(e,n);return a?u({error:a,query:e}):[null,{rows:i,query:e}]}catch(e){return u({error:e})}},async introspect(o){try{let n=F(r),[e,a]=await t.execute(n,o);return e?u({error:e,query:n}):[null,N({query:n,tables:a})]}catch(n){return u({error:n})}},async query(o,n){try{let e=L(o,l),[a,i]=await t.execute(e,n);return a?u({error:a,query:e}):[null,{filteredRowCount:i[0]?.__ps_count__||"0",rows:i,query:e}]}catch(e){return u({error:e})}},async update(o,n){try{let e=S(o,l),[a,i]=await t.execute(e,n);if(a)return u({error:a,query:e});let[c]=i;return c?[null,{row:c,query:e}]:u({error:new Error("Update failed"),query:e})}catch(e){return u({error:e})}}}}function N(r){let{tables:t,query:l}=r;return{filterOperators:M,query:l,schemas:t.reduce((o,n)=>{let{columns:e,name:a,sql:i}=n,c=e.reduce((b,d)=>{let{datatype:m,fk_column:A,name:g}=d,I=O(m);return b[g]={datatype:{...B[I],affinity:I,isArray:!1,isNative:!0,name:m,options:[],schema:R},fkColumn:A,fkSchema:A?R:null,fkTable:d.fk_table,isAutoincrement:!1,isComputed:!!d.computed,isInPrimaryKey:!!d.pk,name:g,nullable:!!d.nullable,schema:R,table:a},b},{});return o.main.tables[a]={columns:c,name:a,schema:"main"},o},{main:{tables:{},name:"main"}}),timezone:"UTC"}}function ye(){let r={parameters:[],sql:"<mocked>"},t=U();return N({query:r,tables:t})}export{fe as createSQLiteAdapter,j as getDeleteQuery,D as getInsertQuery,L as getSelectQuery,F as getTablesQuery,S as getUpdateQuery,ye as mockIntrospect,H as mockSelectQuery,U as mockTablesQuery};
10
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9pbmRleC50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2FkYXB0ZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2RtbC50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2J1aWxkZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9zcWxpdGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RtbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRGVsZXRlUmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJFcnJvcixcbiAgdHlwZSBBZGFwdGVySW5zZXJ0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJRdWVyeVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyUmVxdWlyZW1lbnRzLFxuICB0eXBlIEFkYXB0ZXJVcGRhdGVSZXN1bHQsXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVpdGhlciB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eSwgU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBIH0gZnJvbSBcIi4vZGF0YXR5cGVcIjtcbmltcG9ydCB7IGdldERlbGV0ZVF1ZXJ5LCBnZXRJbnNlcnRRdWVyeSwgZ2V0U2VsZWN0UXVlcnksIGdldFVwZGF0ZVF1ZXJ5IH0gZnJvbSBcIi4vZG1sXCI7XG5pbXBvcnQgeyBnZXRUYWJsZXNRdWVyeSwgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzID0gQWRhcHRlclJlcXVpcmVtZW50cztcblxuY29uc3Qgc2NoZW1hID0gXCJtYWluXCI7XG5cbmNvbnN0IGZpbHRlck9wZXJhdG9ycyA9IFtcbiAgXCI9XCIsXG4gIFwiIT1cIixcbiAgXCI+XCIsXG4gIFwiPj1cIixcbiAgXCI8XCIsXG4gIFwiPD1cIixcbiAgXCJpc1wiLFxuICBcImlzIG5vdFwiLFxuICBcImxpa2VcIixcbiAgXCJub3QgbGlrZVwiLFxuXSBzYXRpc2ZpZXMgRmlsdGVyT3BlcmF0b3JbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNRTGl0ZUFkYXB0ZXIocmVxdWlyZW1lbnRzOiBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLm90aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0U2NoZW1hOiBzY2hlbWEsXG5cbiAgICBhc3luYyBkZWxldGUoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckRlbGV0ZVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0RGVsZXRlUXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIC8vIFRPRE86IHVzZSByZXN1bHRzIHRvby5cbiAgICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgLi4uZGV0YWlscywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBpbnNlcnQoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckluc2VydFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0SW5zZXJ0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIGNvbnN0IFtlcnJvciwgcm93c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3MsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbdGFibGVzRXJyb3IsIHRhYmxlc10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHRhYmxlc1F1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAodGFibGVzRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRhYmxlc0Vycm9yLCBxdWVyeTogdGFibGVzUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeTogdGFibGVzUXVlcnksIHRhYmxlcyB9KV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBxdWVyeShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyUXVlcnlSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFNlbGVjdFF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyBmaWx0ZXJlZFJvd0NvdW50OiByZXN1bHRzWzBdPy5fX3BzX2NvdW50X18gfHwgXCIwXCIsIHJvd3M6IHJlc3VsdHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyVXBkYXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRVcGRhdGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcm93XSA9IHJlc3VsdHM7XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjdXN0b20gZXJyb3I/XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJVcGRhdGUgZmFpbGVkXCIpLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3csIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnRyb3NwZWN0aW9uKGFyZ3M6IHtcbiAgdGFibGVzOiBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xuICBxdWVyeTogUXVlcnk7XG59KTogQWRhcHRlckludHJvc3BlY3RSZXN1bHQge1xuICBjb25zdCB7IHRhYmxlcywgcXVlcnk6IHRhYmxlc1F1ZXJ5IH0gPSBhcmdzO1xuXG4gIHJldHVybiB7XG4gICAgZmlsdGVyT3BlcmF0b3JzLFxuICAgIHF1ZXJ5OiB0YWJsZXNRdWVyeSxcbiAgICBzY2hlbWFzOiB0YWJsZXMucmVkdWNlKFxuICAgICAgKHNjaGVtYXMsIHRhYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzcWw6IF9zcWwgfSA9IHRhYmxlO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zLnJlZHVjZShcbiAgICAgICAgICAoY29sdW1ucywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGF0eXBlLCBma19jb2x1bW4sIG5hbWU6IGNvbHVtbk5hbWUgfSA9IGNvbHVtbjtcblxuICAgICAgICAgICAgY29uc3QgYWZmaW5pdHkgPSBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eShkYXRhdHlwZSk7XG5cbiAgICAgICAgICAgIGNvbHVtbnNbY29sdW1uTmFtZV0gPSB7XG4gICAgICAgICAgICAgIGRhdGF0eXBlOiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogd29ydGggZXhwbG9yaW5nIHN0aWxsIHZpYmluZyB3aXRoIHRoZSBkZWNsYXJlZCBkYXRhIHR5cGUgZm9yIHN0dWZmIGxpa2UgZGF0ZXMgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgICAgICAgICAuLi5TUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEFbYWZmaW5pdHldLFxuICAgICAgICAgICAgICAgIGFmZmluaXR5LFxuICAgICAgICAgICAgICAgIGlzQXJyYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzTmF0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6IGRhdGF0eXBlLFxuICAgICAgICAgICAgICAgIC8vIFRPRE86IHVzZSBgdGFibGUuc3FsYCB0byBkZXRlcm1pbmUgZW51bSBvcHRpb25zIGZyb20gYGNoZWNrYCBjb25zdHJhaW50cy5cbiAgICAgICAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZrQ29sdW1uOiBma19jb2x1bW4sXG4gICAgICAgICAgICAgIGZrU2NoZW1hOiBma19jb2x1bW4gPyBzY2hlbWEgOiBudWxsLFxuICAgICAgICAgICAgICBma1RhYmxlOiBjb2x1bW4uZmtfdGFibGUsXG4gICAgICAgICAgICAgIC8vIFRPRE86IHVzZSBgdGFibGUuc3FsYCB0byBkZXRlcm1pbmUgYXV0b2luY3JlbWVudFxuICAgICAgICAgICAgICBpc0F1dG9pbmNyZW1lbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICBpc0NvbXB1dGVkOiBCb29sZWFuKGNvbHVtbi5jb21wdXRlZCksXG4gICAgICAgICAgICAgIGlzSW5QcmltYXJ5S2V5OiBCb29sZWFuKGNvbHVtbi5wayksXG4gICAgICAgICAgICAgIG5hbWU6IGNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgIG51bGxhYmxlOiBCb29sZWFuKGNvbHVtbi5udWxsYWJsZSksXG4gICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICAgdGFibGU6IHRhYmxlTmFtZSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30gYXMgVGFibGVbXCJjb2x1bW5zXCJdLFxuICAgICAgICApO1xuXG4gICAgICAgIHNjaGVtYXMubWFpbiEudGFibGVzW3RhYmxlTmFtZV0gPSB7XG4gICAgICAgICAgY29sdW1uczogY29sdW1uc1JlY29yZCxcbiAgICAgICAgICBuYW1lOiB0YWJsZU5hbWUsXG4gICAgICAgICAgc2NoZW1hOiBcIm1haW5cIixcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc2NoZW1hcztcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1haW46IHsgdGFibGVzOiB7fSwgbmFtZTogXCJtYWluXCIgfSxcbiAgICAgIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0W1wic2NoZW1hc1wiXSBhcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdFtcInNjaGVtYXNcIl0sXG4gICAgKSxcbiAgICB0aW1lem9uZTogXCJVVENcIixcbiAgfTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tJbnRyb3NwZWN0KCkge1xuICBjb25zdCBxdWVyeSA9IHsgcGFyYW1ldGVyczogW10sIHNxbDogXCI8bW9ja2VkPlwiIH0gYXMgUXVlcnk7XG4gIGNvbnN0IHRhYmxlcyA9IG1vY2tUYWJsZXNRdWVyeSgpO1xuXG4gIHJldHVybiBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgcXVlcnksIHRhYmxlcyB9KSBhcyB7XG4gICAgLy8gYmVzdCBlZmZvcnQsIG5vIG5lZWQgZ28gb3ZlcmJvYXJkLlxuICAgIHNjaGVtYXM6IHtcbiAgICAgIG1haW46IHtcbiAgICAgICAgbmFtZTogXCJtYWluXCI7XG4gICAgICAgIHRhYmxlczoge1xuICAgICAgICAgIFtUIGluICh0eXBlb2YgdGFibGVzKVtudW1iZXJdW1wibmFtZVwiXV06IFRhYmxlO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9O1xuICAgIHRpbWV6b25lOiBzdHJpbmc7XG4gICAgZmlsdGVyT3BlcmF0b3JzOiBGaWx0ZXJPcGVyYXRvcltdO1xuICAgIHF1ZXJ5OiBRdWVyeTtcbiAgfSBzYXRpc2ZpZXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCB0eXBlIFNRTGl0ZUFmZmluaXR5ID0gXCJCTE9CXCIgfCBcIklOVEVHRVJcIiB8IFwiTlVMTFwiIHwgXCJOVU1FUklDXCIgfCBcIlJFQUxcIiB8IFwiVEVYVFwiO1xuXG5leHBvcnQgY29uc3QgU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBOiBSZWNvcmQ8U1FMaXRlQWZmaW5pdHksIFBpY2s8RGF0YVR5cGUsIFwiZ3JvdXBcIj4+ID0ge1xuICBCTE9COiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIElOVEVHRVI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIE5VTEw6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgTlVNRVJJQzoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgUkVBTDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgVEVYVDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxufTtcblxuLyoqXG4gKiBodHRwczovL3NxbGl0ZS5vcmcvZGF0YXR5cGUzLmh0bWwjZGV0ZXJtaW5hdGlvbl9vZl9jb2x1bW5fYWZmaW5pdHlcbiAqXG4gKiBETyBOT1QgQ0hBTkdFIFRIRSBPUkRFUiBPRiBUSEUgQ0hFQ0tTIElOIFRISVMgRlVOQ1RJT04hXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eShkZWNsYXJlZERhdGFUeXBlOiBzdHJpbmcgfCBudWxsKTogU1FMaXRlQWZmaW5pdHkge1xuICBpZiAoIWRlY2xhcmVkRGF0YVR5cGUpIHtcbiAgICByZXR1cm4gXCJCTE9CXCI7XG4gIH1cblxuICBjb25zdCB1cHBlclR5cGUgPSBkZWNsYXJlZERhdGFUeXBlLnRvVXBwZXJDYXNlKCk7XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIklOVFwiKSkge1xuICAgIHJldHVybiBcIklOVEVHRVJcIjtcbiAgfVxuXG4gIGlmICh1cHBlclR5cGUuaW5jbHVkZXMoXCJURVhUXCIpIHx8IHVwcGVyVHlwZS5pbmNsdWRlcyhcIkNIQVJcIikgfHwgdXBwZXJUeXBlLmluY2x1ZGVzKFwiQ0xPQlwiKSkge1xuICAgIHJldHVybiBcIlRFWFRcIjtcbiAgfVxuXG4gIGlmICh1cHBlclR5cGUuaW5jbHVkZXMoXCJCTE9CXCIpKSB7XG4gICAgcmV0dXJuIFwiQkxPQlwiO1xuICB9XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIlJFQUxcIikgfHwgdXBwZXJUeXBlLmluY2x1ZGVzKFwiRkxPQVwiKSB8fCB1cHBlclR5cGUuaW5jbHVkZXMoXCJET1VCXCIpKSB7XG4gICAgcmV0dXJuIFwiUkVBTFwiO1xuICB9XG5cbiAgcmV0dXJuIFwiTlVNRVJJQ1wiO1xufVxuIiwgImltcG9ydCB7IGV4cHJlc3Npb25CdWlsZGVyLCB0eXBlIEluZmVyUmVzdWx0LCB0eXBlIFJlZmVyZW5jZUV4cHJlc3Npb24sIHNxbCB9IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHR5cGUgeyBBZGFwdGVyRGVsZXRlRGV0YWlscywgQWRhcHRlckluc2VydERldGFpbHMsIEFkYXB0ZXJRdWVyeURldGFpbHMsIEFkYXB0ZXJVcGRhdGVEZXRhaWxzIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB7IGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzLCB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGNvbXBpbGUsIGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24gfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgQmlnSW50U3RyaW5nIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IGdldFNRTGl0ZUJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5pbXBvcnQgeyBtb2NrVGFibGVzUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgc2VsZWN0cyBhbGwgY29sdW1ucyBmcm9tIGEgdGFibGUgd2l0aCBhbiB1bmJvdW5kIHJvdyBjb3VudCBhcyBgX19wc19jb3VudF9fYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBmaWx0ZXIgPSB7IGFmdGVyOiBcImFuZFwiLCBmaWx0ZXJzOiBbXSwga2luZDogXCJGaWx0ZXJHcm91cFwiIH0sXG4gICAgcGFnZUluZGV4LFxuICAgIHBhZ2VTaXplLFxuICAgIHNvcnRPcmRlcixcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFNRTGl0ZUJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIGNvbnN0IGZpbHRlckV4cHJlc3Npb24gPSBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uKGZpbHRlci5maWx0ZXJzLCBjb2x1bW5zKTtcblxuICBjb25zdCBjb3VudFF1ZXJ5ID0gYnVpbGRlclxuICAgIC5zZWxlY3RGcm9tKHRhYmxlTmFtZSlcbiAgICAud2hlcmUoZmlsdGVyRXhwcmVzc2lvbilcbiAgICAuc2VsZWN0KChlYikgPT4gZWIuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmZuLmNvYWxlc2NlKGViLmZuLmNvdW50QWxsKCksIHNxbC5saXQoMCkpLCBcInRleHRcIikuYXMoXCJ2YWx1ZVwiKSk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGgoXCJjb3VudFwiLCAoKSA9PiBjb3VudFF1ZXJ5KVxuICAgICAgLnNlbGVjdEZyb20oW3RhYmxlTmFtZSwgXCJjb3VudFwiXSlcbiAgICAgIC8vIFRPRE86IGN1cnNvciBwYWdpbmF0aW9uP1xuICAgICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgICAuc2VsZWN0KFxuICAgICAgICBzcWxcbiAgICAgICAgICAucmVmPEJpZ0ludFN0cmluZz4oXG4gICAgICAgICAgICBcImNvdW50LnZhbHVlXCIgc2F0aXNmaWVzIFJlZmVyZW5jZUV4cHJlc3Npb248eyBjb3VudDogSW5mZXJSZXN1bHQ8dHlwZW9mIGNvdW50UXVlcnk+W251bWJlcl0gfSwgXCJjb3VudFwiPixcbiAgICAgICAgICApXG4gICAgICAgICAgLmFzKFwiX19wc19jb3VudF9fXCIpLFxuICAgICAgKVxuICAgICAgLnNlbGVjdChPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC4kY2FsbCgocWIpID0+IHNvcnRPcmRlci5yZWR1Y2UoKHFiLCBpdGVtKSA9PiBxYi5vcmRlckJ5KGl0ZW0uY29sdW1uLCBpdGVtLmRpcmVjdGlvbiksIHFiKSlcbiAgICAgIC5saW1pdChwYWdlU2l6ZSlcbiAgICAgIC8vIHdlJ3JlIGluamVjdGluZyB0aGUgb2Zmc2V0IHZhbHVlIGhlcmUgdG8gYXZvaWQgc2VyaWFsaXphdGlvbiBjb21wbGV4aXR5IChgYmlnaW50YCBpcyBhIG5vLWdvIGZvciBgSlNPTi5zdHJpbmdpZnlgKS5cbiAgICAgIC5vZmZzZXQoc3FsLmxpdChCaWdJbnQocGFnZUluZGV4KSAqIEJpZ0ludChwYWdlU2l6ZSkpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tTZWxlY3RRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjE6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMSxcbiAgICAgIG5hbWU6IFwiSm9obiBEb2VcIixcbiAgICAgIF9fcHNfY291bnRfXzogXCIyXCIsXG4gICAgICByb2xlOiBcImFkbWluXCIsXG4gICAgICBuYW1lX3JvbGU6IFwiSm9ubiBEb2UgLSBhZG1pblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoXCIyMDI1LTAxLTI2VDIwOjU2OjEyLjM0NVpcIiksXG4gICAgICBkZWxldGVkX2F0OiBudWxsLFxuICAgICAgaWQ6IDIsXG4gICAgICBuYW1lOiBcIkphbmUgRG9lXCIsXG4gICAgICBfX3BzX2NvdW50X186IFwiMlwiLFxuICAgICAgcm9sZTogXCJwb3dlcnVzZXJcIixcbiAgICAgIG5hbWVfcm9sZTogXCJKYW5lIERvZSAtIHBvd2VydXNlclwiLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCBubyBuZWVkIHRvIGdvIG92ZXJib2FyZFxuICAgIFtLIGluIFJldHVyblR5cGU8dHlwZW9mIG1vY2tUYWJsZXNRdWVyeT5bMV1bXCJjb2x1bW5zXCJdW251bWJlcl1bXCJuYW1lXCJdIHwgXCJfX3BzX2NvdW50X19cIl06IHVua25vd247XG4gIH1bXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBkZWxldGVzIGEgZ2l2ZW4gc2V0IG9mIHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlckRlbGV0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHJvd3MsXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRTUUxpdGVCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAuZGVsZXRlRnJvbSh0YWJsZU5hbWUpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMocm93cywgY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKE9iamVjdC5rZXlzKGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzKCkuYXMoXCJfX3BzX2RlbGV0ZWRfYXRfX1wiKSksXG4gICk7XG59XG5cbi8qKlxuICogSW5zZXJ0cyBvbmUgb3IgbW9yZSByb3dzIGludG8gYSB0YWJsZSBhbmQgcmV0dXJucyB0aGUgaW5zZXJ0ZWQgcm93cyBhbG9uZyB3aXRoIHRoZWlyIGBjdGlkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluc2VydFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVySW5zZXJ0RGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gICAgcm93cyxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFNRTGl0ZUJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC5pbnNlcnRJbnRvKHRhYmxlTmFtZSlcbiAgICAgIC52YWx1ZXMocm93cy5tYXAoKHJvdykgPT4gKE9iamVjdC5rZXlzKHJvdykubGVuZ3RoID09PSAwID8geyBbT2JqZWN0LmtleXMoY29sdW1ucylbMF0hXTogbnVsbCB9IDogcm93KSkpXG4gICAgICAucmV0dXJuaW5nKE9iamVjdC5rZXlzKGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzKCkuYXMoXCJfX3BzX2luc2VydGVkX2F0X19cIikpLFxuICApO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHVwZGF0ZXMgYSBnaXZlbiByb3cgaW4gYSB0YWJsZSB3aXRoIGdpdmVuIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcGRhdGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclVwZGF0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGNoYW5nZXMsXG4gICAgcm93LFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0U1FMaXRlQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLnVwZGF0ZVRhYmxlKHRhYmxlTmFtZSlcbiAgICAgIC5zZXQoY2hhbmdlcylcbiAgICAgIC4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhbcm93XSwgY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKE9iamVjdC5rZXlzKGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzKCkuYXMoXCJfX3BzX3VwZGF0ZWRfYXRfX1wiKSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKSB7XG4gIGNvbnN0IGViID0gZXhwcmVzc2lvbkJ1aWxkZXIoKTtcblxuICByZXR1cm4gZWIuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmNhc3Qoc3FsYChqdWxpYW5kYXkoJ25vdycpIC0gMjQ0MDU4Ny41KSAqIDg2NDAwMDAwLjBgLCBcImludGVnZXJcIiksIFwidGV4dFwiKTtcbn1cbiIsICJpbXBvcnQgeyB0eXBlIEt5c2VseSwgU3FsaXRlQWRhcHRlciwgU3FsaXRlUXVlcnlDb21waWxlciB9IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBnZXRCdWlsZGVyIH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gZ2V0U1FMaXRlQnVpbGRlcjxEYXRhYmFzZSA9IGFueT4oXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pOiBLeXNlbHk8RGF0YWJhc2U+IHtcbiAgcmV0dXJuIGdldEJ1aWxkZXI8RGF0YWJhc2U+KHtcbiAgICAuLi5yZXF1aXJlbWVudHMsXG4gICAgQWRhcHRlcjogU3FsaXRlQWRhcHRlcixcbiAgICBRdWVyeUNvbXBpbGVyOiBTcWxpdGVRdWVyeUNvbXBpbGVyLFxuICB9KTtcbn1cbiIsICIvKipcbiAqIFNRTGl0ZSBpbnRyb3NwZWN0aW9uIHF1ZXJpZXMgdG8gYmUgdXNlZCBieSB0aGUgU1FMaXRlIGFkYXB0ZXIncyBpbnRyb3NwZWN0IG1ldGhvZC5cbiAqIEBtb2R1bGUgc3FsaXRlLWNvcmUvaW50cm9zcGVjdGlvblxuICpcbiAqIFJlZmVyZW5jZXM6XG4gKiBodHRwczovL3NxbGl0ZS5vcmcvcHJhZ21hLmh0bWxcbiAqIGh0dHBzOi8vc3FsaXRlLm9yZy9zY2hlbWF0YWIuaHRtbFxuICovXG5cbmltcG9ydCB7IGV4cHJlc3Npb25CdWlsZGVyIH0gZnJvbSBcImt5c2VseVwiO1xuaW1wb3J0IHsganNvbkFycmF5RnJvbSB9IGZyb20gXCJreXNlbHkvaGVscGVycy9zcWxpdGVcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBjb21waWxlLCB0eXBlIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgeyBnZXRTUUxpdGVCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlclwiO1xuXG5pbnRlcmZhY2UgRGF0YWJhc2Uge1xuICAvKiogdGhlIG1haW4gc3lzdGVtIHRhYmxlICovXG4gIHNxbGl0ZV9zY2hlbWE6IHtcbiAgICAvKiogb2JqZWN0IG5hbWUgKi9cbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgLyoqIHBhZ2UgbnVtYmVyIGluIHJvb3QgaW5kZXggd2hlbiBvYmplY3QgaXMgYSB0YWJsZS4gKi9cbiAgICByb290cGFnZTogbnVtYmVyO1xuICAgIC8qKiBzcWwgc3RhdGVtZW50IHRoYXQgY2FuIHJlY3JlYXRlIHRoZSBvYmplY3QuIG51bGwgd2hlbiBpbnRlcm5hbCBpbmRleCBvYmplY3QuICovXG4gICAgc3FsOiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKiByZWxhdGVkIHRhYmxlL3ZpZXcgbmFtZSB3aGVuIG9iamVjdCBpcyBhbiBpbmRleC90cmlnZ2VyLiAqL1xuICAgIHRibF9uYW1lOiBzdHJpbmc7XG4gICAgLyoqIG9iamVjdCB0eXBlICovXG4gICAgdHlwZTogXCJpbmRleFwiIHwgXCJ0YWJsZVwiIHwgXCJ0cmlnZ2VyXCIgfCBcInZpZXdcIjtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgc2hhcGUgb2YgZWFjaCByb3cgcmV0dXJuZWQgYnkgYHByYWdtYV90YWJsZV9saXN0KHRhYmxlTmFtZT8pYC5cbiAqL1xuaW50ZXJmYWNlIFByYWdtYVRhYmxlTGlzdCB7XG4gIC8qKiBvYmplY3QgbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBzY2hlbWEgbmFtZSAqL1xuICBzY2hlbWE6IFwibWFpblwiIHwgXCJ0ZW1wXCI7XG4gIC8qKiBvYmplY3QgdHlwZSAqL1xuICB0eXBlOiBcInNoYWRvd1wiIHwgXCJ0YWJsZVwiIHwgXCJ2aWV3XCIgfCBcInZpcnR1YWxcIjtcbn1cblxuLyoqXG4gKiBUaGUgc2hhcGUgb2YgZWFjaCByb3cgcmV0dXJuZWQgYnkgYHByYWdtYV90YWJsZV94aW5mbyh0YWJsZU5hbWUpYC5cbiAqL1xuaW50ZXJmYWNlIFByYWdtYVRhYmxlWEluZm8ge1xuICAvKiogXCJyYW5rIHdpdGhpbiBjdXJyZW50IHJlc3VsdCBzZXRcIiAqL1xuICBjaWQ6IG51bWJlcjtcbiAgLyoqIGRlZmF1bHQgdmFsdWUgKi9cbiAgZGZsdF92YWx1ZTogdW5rbm93bjtcbiAgLyoqIDAgLSBub3JtYWwsIDEgLSBoaWRkZW4sIDItMyAtIGR5bmFtaWMvc3RvcmVkIGdlbmVyYXRlZCAqL1xuICBoaWRkZW46IDAgfCAxIHwgMiB8IDM7XG4gIC8qKiBjb2x1bW4gbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiB3aGV0aGVyIHRoZSBjb2x1bW4gY2FuIGJlIG51bGwgKi9cbiAgbm90bnVsbDogMCB8IDE7XG4gIC8qKiAwIGlmIG5vdCBwYXJ0IG9mIHRoZSBwcmltYXJ5IGtleSwgb3RoZXJ3aXNlIHRoZSAxLWJhc2VkIG9yZGluYWwgbnVtYmVyIG9mIHRoZSBjb2x1bW4gaW4gdGhlIHByaW1hcnkga2V5ICovXG4gIHBrOiBudW1iZXI7XG4gIC8qKiBkYXRhIHR5cGUgKi9cbiAgdHlwZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzaGFwZSBvZiBlYWNoIHJvdyByZXR1cm5lZCBieSBgcHJhZ21hX2ZvcmVpZ25fa2V5X2xpc3QodGFibGVOYW1lKWAuXG4gKi9cbmludGVyZmFjZSBQcmFnbWFGb3JlaWduS2V5TGlzdCB7XG4gIC8qKiBjb2x1bW4gbmFtZSAqL1xuICBmcm9tOiBzdHJpbmc7XG4gIC8qKiBvcmRpbmFsIG51bWJlciBvZiBjb2x1bW4gd2l0aGluIHRoZSBmb3JlaWduIGtleSAqL1xuICBzZXE6IG51bWJlcjtcbiAgLyoqIGZvcmVpZ24gdGFibGUgbmFtZSAqL1xuICB0YWJsZTogc3RyaW5nO1xuICAvKiogY29sdW1uIG5hbWUgaW4gdGhlIGZvcmVpZ24gdGFibGUgKi9cbiAgdG86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlc1F1ZXJ5KHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4pIHtcbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgZ2V0U1FMaXRlQnVpbGRlcjxEYXRhYmFzZT4ocmVxdWlyZW1lbnRzKVxuICAgICAgLnNlbGVjdEZyb20oZXhwcmVzc2lvbkJ1aWxkZXIoKS5mbjxQcmFnbWFUYWJsZUxpc3Q+KFwicHJhZ21hX3RhYmxlX2xpc3RcIiwgW10pLmFzKFwidGxcIikpXG4gICAgICAubGVmdEpvaW4oXCJzcWxpdGVfc2NoZW1hIGFzIHNzXCIsIChqYikgPT4gamIub25SZWYoXCJzcy50eXBlXCIsIFwiPVwiLCBcInRsLnR5cGVcIikub25SZWYoXCJzcy5uYW1lXCIsIFwiPVwiLCBcInRsLm5hbWVcIikpXG4gICAgICAud2hlcmUoXCJ0bC50eXBlXCIsIFwiaW5cIiwgW1widGFibGVcIiwgXCJ2aWV3XCJdKVxuICAgICAgLy8gZXhjbHVkZSB0ZW1wb3JhcnkgdGFibGVzL3ZpZXdzXG4gICAgICAud2hlcmUoXCJ0bC5zY2hlbWFcIiwgXCI9XCIsIFwibWFpblwiKVxuICAgICAgLy8gZXhjbHVkZSBzeXN0ZW0gdGFibGVzL3ZpZXdzXG4gICAgICAud2hlcmUoXCJ0bC5uYW1lXCIsIFwibm90IGxpa2VcIiwgXCJzcWxpdGVfJVwiKVxuICAgICAgLnNlbGVjdChbXCJ0bC5uYW1lXCIsIFwic3Muc3FsXCJdKVxuICAgICAgLnNlbGVjdCgoZWIpID0+IFtcbiAgICAgICAganNvbkFycmF5RnJvbShcbiAgICAgICAgICBlYlxuICAgICAgICAgICAgLnNlbGVjdEZyb20oZWIuZm48UHJhZ21hVGFibGVYSW5mbz4oXCJwcmFnbWFfdGFibGVfeGluZm9cIiwgW1widGwubmFtZVwiXSkuYXMoXCJ0eGlcIikpXG4gICAgICAgICAgICAubGVmdEpvaW4oXG4gICAgICAgICAgICAgIGViLmZuPFByYWdtYUZvcmVpZ25LZXlMaXN0PihcInByYWdtYV9mb3JlaWduX2tleV9saXN0XCIsIFtcInRsLm5hbWVcIl0pLmFzKFwiZmtsXCIpLFxuICAgICAgICAgICAgICBcImZrbC5mcm9tXCIsXG4gICAgICAgICAgICAgIFwidHhpLm5hbWVcIixcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIGV4Y2x1ZGUgaGlkZGVuIGNvbHVtbnNcbiAgICAgICAgICAgIC53aGVyZShcInR4aS5oaWRkZW5cIiwgXCIhPVwiLCAxKVxuICAgICAgICAgICAgLnNlbGVjdChbXCJ0eGkubmFtZVwiLCBcInR4aS50eXBlIGFzIGRhdGF0eXBlXCIsIFwiZmtsLnRhYmxlIGFzIGZrX3RhYmxlXCIsIFwiZmtsLnRvIGFzIGZrX2NvbHVtblwiXSlcbiAgICAgICAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgICAgICAgIGViKFwidHhpLmhpZGRlblwiLCBcImluXCIsIFsyLCAzXSkuYXMoXCJjb21wdXRlZFwiKSxcbiAgICAgICAgICAgICAgZWIoXCJ0eGkubm90bnVsbFwiLCBcIiE9XCIsIDApLmFzKFwibnVsbGFibGVcIiksXG4gICAgICAgICAgICAgIGViKFwidHhpLnBrXCIsIFwiIT1cIiwgMCkuYXMoXCJwa1wiKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICApLmFzKFwiY29sdW1uc1wiKSxcbiAgICAgIF0pLFxuICAgIHsgdHJhbnNmb3JtYXRpb25zOiB7IGNvbHVtbnM6IFwianNvbi1wYXJzZVwiIH0gfSxcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUYWJsZXNRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBuYW1lOiBcImFuaW1hbHNcIixcbiAgICAgIHNxbDogXCJDUkVBVEUgVEFCTEUgYW5pbWFscyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFtZSBURVhUKTtcIixcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJJTlRFR0VSXCIsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVEVYVFwiLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInVzZXJzXCIsXG4gICAgICBzcWw6IFwiQ1JFQVRFIFRBQkxFIHVzZXJzIChpZCBVVUlEIFBSSU1BUlkgS0VZLCBjcmVhdGVkX2F0IFRJTUVTVEFNUCwgZGVsZXRlZF9hdCBUSU1FU1RBTVAsIHJvbGUgdmFyY2hhciwgbmFtZSB2YXJjaGFyLCBuYW1lX3JvbGUgdGV4dCk7XCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVVVJRFwiLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlRJTUVTVEFNUFwiLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiZGVsZXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlRJTUVTVEFNUFwiLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicm9sZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInZhcmNoYXJcIixcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lX3JvbGVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29tcG9zaXRlX3BrXCIsXG4gICAgICBzcWw6IFwiQ1JFQVRFIFRBQkxFIGNvbXBvc2l0ZV9wayAoaWQgVVVJRCwgbmFtZSBURVhULCBjcmVhdGVkX2F0IHRpbWVzdGFtcCwgUFJJTUFSWSBLRVkgKGlkLCBuYW1lKSk7XCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVVVJRFwiLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlRFWFRcIixcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImNyZWF0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NxbGl0ZS5kLnRzXCIgLz5cbmltcG9ydCB7IHNxbCB9IGZyb20gJy4uL3Jhdy1idWlsZGVyL3NxbC5qcyc7XG5pbXBvcnQgeyBnZXRKc29uT2JqZWN0QXJncyB9IGZyb20gJy4uL3V0aWwvanNvbi1vYmplY3QtYXJncy5qcyc7XG4vKipcbiAqIEEgU1FMaXRlIGhlbHBlciBmb3IgYWdncmVnYXRpbmcgYSBzdWJxdWVyeSBpbnRvIGEgSlNPTiBhcnJheS5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiB5b3UndmUgaW5zdGFsbGVkIHRoZSBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAuXG4gKiBPdGhlcndpc2UgdGhlIG5lc3RlZCBzZWxlY3Rpb25zIHdpbGwgYmUgcmV0dXJuZWQgYXMgSlNPTiBzdHJpbmdzLlxuICpcbiAqIFRoZSBwbHVnaW4gY2FuIGJlIGluc3RhbGxlZCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNxbGl0ZSBmcm9tICdiZXR0ZXItc3FsaXRlMydcbiAqIGltcG9ydCB7IEt5c2VseSwgUGFyc2VKU09OUmVzdWx0c1BsdWdpbiwgU3FsaXRlRGlhbGVjdCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICpcbiAqIGNvbnN0IGRiID0gbmV3IEt5c2VseTxEYXRhYmFzZT4oe1xuICogICBkaWFsZWN0OiBuZXcgU3FsaXRlRGlhbGVjdCh7XG4gKiAgICAgZGF0YWJhc2U6IG5ldyBTcWxpdGUoJzptZW1vcnk6JylcbiAqICAgfSksXG4gKiAgIHBsdWdpbnM6IFtuZXcgUGFyc2VKU09OUmVzdWx0c1BsdWdpbigpXVxuICogfSlcbiAqIGBgYFxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvc3FsaXRlJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkFycmF5RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLm9yZGVyQnkoJ3BldC5uYW1lJylcbiAqICAgICApLmFzKCdwZXRzJylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXS5wZXRfaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXS5uYW1lXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoU1FMaXRlKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIChcbiAqICAgc2VsZWN0IGNvYWxlc2NlKGpzb25fZ3JvdXBfYXJyYXkoanNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIFwiYWdnXCIuXCJwZXRfaWRcIixcbiAqICAgICAnbmFtZScsIFwiYWdnXCIuXCJuYW1lXCJcbiAqICAgKSksICdbXScpIGZyb20gKFxuICogICAgIHNlbGVjdCBcInBldFwiLlwiaWRcIiBhcyBcInBldF9pZFwiLCBcInBldFwiLlwibmFtZVwiXG4gKiAgICAgZnJvbSBcInBldFwiXG4gKiAgICAgd2hlcmUgXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIlxuICogICAgIG9yZGVyIGJ5IFwicGV0XCIuXCJuYW1lXCJcbiAqICAgKSBhcyBcImFnZ1wiXG4gKiApIGFzIFwicGV0c1wiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkFycmF5RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCBjb2FsZXNjZShqc29uX2dyb3VwX2FycmF5KGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MoZXhwci50b09wZXJhdGlvbk5vZGUoKSwgJ2FnZycpKX0pKSwgJ1tdJykgZnJvbSAke2V4cHJ9IGFzIGFnZylgO1xufVxuLyoqXG4gKiBBIFNRTGl0ZSBoZWxwZXIgZm9yIHR1cm5pbmcgYSBzdWJxdWVyeSBpbnRvIGEgSlNPTiBvYmplY3QuXG4gKlxuICogVGhlIHN1YnF1ZXJ5IG11c3Qgb25seSByZXR1cm4gb25lIHJvdy5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiB5b3UndmUgaW5zdGFsbGVkIHRoZSBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAuXG4gKiBPdGhlcndpc2UgdGhlIG5lc3RlZCBzZWxlY3Rpb25zIHdpbGwgYmUgcmV0dXJuZWQgYXMgSlNPTiBzdHJpbmdzLlxuICpcbiAqIFRoZSBwbHVnaW4gY2FuIGJlIGluc3RhbGxlZCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNxbGl0ZSBmcm9tICdiZXR0ZXItc3FsaXRlMydcbiAqIGltcG9ydCB7IEt5c2VseSwgUGFyc2VKU09OUmVzdWx0c1BsdWdpbiwgU3FsaXRlRGlhbGVjdCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICpcbiAqIGNvbnN0IGRiID0gbmV3IEt5c2VseTxEYXRhYmFzZT4oe1xuICogICBkaWFsZWN0OiBuZXcgU3FsaXRlRGlhbGVjdCh7XG4gKiAgICAgZGF0YWJhc2U6IG5ldyBTcWxpdGUoJzptZW1vcnk6JylcbiAqICAgfSksXG4gKiAgIHBsdWdpbnM6IFtuZXcgUGFyc2VKU09OUmVzdWx0c1BsdWdpbigpXVxuICogfSlcbiAqIGBgYFxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uT2JqZWN0RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3NxbGl0ZSdcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25PYmplY3RGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAud2hlcmUoJ3BldC5pc19mYXZvcml0ZScsICc9JywgdHJ1ZSlcbiAqICAgICApLmFzKCdmYXZvcml0ZV9wZXQnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5mYXZvcml0ZV9wZXQ/LnBldF9pZFxuICogcmVzdWx0WzBdPy5mYXZvcml0ZV9wZXQ/Lm5hbWVcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChTUUxpdGUpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwgKFxuICogICBzZWxlY3QganNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIFwib2JqXCIuXCJwZXRfaWRcIixcbiAqICAgICAnbmFtZScsIFwib2JqXCIuXCJuYW1lXCJcbiAqICAgKSBmcm9tIChcbiAqICAgICBzZWxlY3QgXCJwZXRcIi5cImlkXCIgYXMgXCJwZXRfaWRcIiwgXCJwZXRcIi5cIm5hbWVcIlxuICogICAgIGZyb20gXCJwZXRcIlxuICogICAgIHdoZXJlIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCJcbiAqICAgICBhbmQgXCJwZXRcIi5cImlzX2Zhdm9yaXRlXCIgPSA/XG4gKiAgICkgYXMgb2JqXG4gKiApIGFzIFwiZmF2b3JpdGVfcGV0XCJcbiAqIGZyb20gXCJwZXJzb25cIjtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbk9iamVjdEZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QganNvbl9vYmplY3QoJHtzcWwuam9pbihnZXRTcWxpdGVKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnb2JqJykpfSkgZnJvbSAke2V4cHJ9IGFzIG9iailgO1xufVxuLyoqXG4gKiBUaGUgU1FMaXRlIGBqc29uX29iamVjdGAgZnVuY3Rpb24uXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgeW91J3ZlIGluc3RhbGxlZCB0aGUgYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gLlxuICogT3RoZXJ3aXNlIHRoZSBuZXN0ZWQgc2VsZWN0aW9ucyB3aWxsIGJlIHJldHVybmVkIGFzIEpTT04gc3RyaW5ncy5cbiAqXG4gKiBUaGUgcGx1Z2luIGNhbiBiZSBpbnN0YWxsZWQgbGlrZSB0aGlzOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgKiBhcyBTcWxpdGUgZnJvbSAnYmV0dGVyLXNxbGl0ZTMnXG4gKiBpbXBvcnQgeyBLeXNlbHksIFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4sIFNxbGl0ZURpYWxlY3QgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAqXG4gKiBjb25zdCBkYiA9IG5ldyBLeXNlbHk8RGF0YWJhc2U+KHtcbiAqICAgZGlhbGVjdDogbmV3IFNxbGl0ZURpYWxlY3Qoe1xuICogICAgIGRhdGFiYXNlOiBuZXcgU3FsaXRlKCc6bWVtb3J5OicpXG4gKiAgIH0pLFxuICogICBwbHVnaW5zOiBbbmV3IFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4oKV1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICogaW1wb3J0IHsganNvbkJ1aWxkT2JqZWN0IH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvc3FsaXRlJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkJ1aWxkT2JqZWN0KHtcbiAqICAgICAgIGZpcnN0OiBlYi5yZWYoJ2ZpcnN0X25hbWUnKSxcbiAqICAgICAgIGxhc3Q6IGViLnJlZignbGFzdF9uYW1lJyksXG4gKiAgICAgICBmdWxsOiBzcWw8c3RyaW5nPmBmaXJzdF9uYW1lIHx8XHUwMEEwJyAnIHx8IGxhc3RfbmFtZWBcbiAqICAgICB9KS5hcygnbmFtZScpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/Lm5hbWUuZmlyc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5sYXN0XG4gKiByZXN1bHRbMF0/Lm5hbWUuZnVsbFxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCBqc29uX29iamVjdChcbiAqICAgJ2ZpcnN0JywgZmlyc3RfbmFtZSxcbiAqICAgJ2xhc3QnLCBsYXN0X25hbWUsXG4gKiAgICdmdWxsJywgXCJmaXJzdF9uYW1lXCIgfHwgJyAnIHx8IFwibGFzdF9uYW1lXCJcbiAqICkgYXMgXCJuYW1lXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQnVpbGRPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIHNxbCBganNvbl9vYmplY3QoJHtzcWwuam9pbihPYmplY3Qua2V5cyhvYmopLmZsYXRNYXAoKGspID0+IFtzcWwubGl0KGspLCBvYmpba11dKSl9KWA7XG59XG5mdW5jdGlvbiBnZXRTcWxpdGVKc29uT2JqZWN0QXJncyhub2RlLCB0YWJsZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBnZXRKc29uT2JqZWN0QXJncyhub2RlLCB0YWJsZSk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTUUxpdGUganNvbkFycmF5RnJvbSBhbmQganNvbk9iamVjdEZyb20gZnVuY3Rpb25zIGNhbiBvbmx5IGhhbmRsZSBleHBsaWNpdCBzZWxlY3Rpb25zIGR1ZSB0byBsaW1pdGF0aW9ucyBvZiB0aGUganNvbl9vYmplY3QgZnVuY3Rpb24uIHNlbGVjdEFsbCgpIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBzdWJxdWVyeS4nKTtcbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7OztpT0FBQUEsSUNBQUMsSUNBQUMsSUFJTyxJQUFNQyxFQUErRSxDQUMxRixLQUFNLENBQ0osTUFBTyxLQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sU0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLEtBQ1QsRUFDQSxRQUFTLENBQ1AsTUFBTyxTQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sU0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFFBQ1QsQ0FDRixFQU9PLFNBQVNDLEVBQXdCQyxFQUFpRCxDQUN2RixHQUFJLENBQUNBLEVBQ0gsTUFBTyxPQUdULElBQU1DLEVBQVlELEVBQWlCLFlBQVksRUFFL0MsT0FBSUMsRUFBVSxTQUFTLEtBQUssRUFDbkIsVUFHTEEsRUFBVSxTQUFTLE1BQU0sR0FBS0EsRUFBVSxTQUFTLE1BQU0sR0FBS0EsRUFBVSxTQUFTLE1B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aW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQSIsICJkZXRlcm1pbmVDb2x1bW5BZmZpbml0eSIsICJkZWNsYXJlZERhdGFUeXBlIiwgInVwcGVyVHlwZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJnZXRTUUxpdGVCdWlsZGVyIiwgInJlcXVpcmVtZW50cyIsICJnZXRCdWlsZGVyIiwgIlNxbGl0ZUFkYXB0ZXIiLCAiU3FsaXRlUXVlcnlDb21waWxlciIsICJnZXRTZWxlY3RRdWVyeSIsICJkZXRhaWxzIiwgInJlcXVpcmVtZW50cyIsICJmaWx0ZXIiLCAicGFnZUluZGV4IiwgInBhZ2VTaXplIiwgInNvcnRPcmRlciIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJidWlsZGVyIiwgImdldFNRTGl0ZUJ1aWxkZXIiLCAiZmlsdGVyRXhwcmVzc2lvbiIsICJnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uIiwgImNvdW50UXVlcnkiLCAiZWIiLCAic3FsIiwgImNvbXBpbGUiLCAicWIiLCAiaXRlbSIsICJtb2NrU2VsZWN0UXVlcnkiLCAiZ2V0RGVsZXRlUXVlcnkiLCAicm93cyIsICJhcHBseUluZmVycmVkUm93RmlsdGVycyIsICJnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzIiwgImdldEluc2VydFF1ZXJ5IiwgInJvdyIsICJnZXRVcGRhdGVRdWVyeSIsICJjaGFuZ2VzIiwgImV4cHJlc3Npb25CdWlsZGVyIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImpzb25BcnJheUZyb20iLCAiZXhwciIsICJzcWwiLCAiZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MiLCAiZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MiLCAibm9kZSIsICJ0YWJsZSIsICJnZXRKc29uT2JqZWN0QXJncyIsICJnZXRUYWJsZXNRdWVyeSIsICJyZXF1aXJlbWVudHMiLCAiY29tcGlsZSIsICJnZXRTUUxpdGVCdWlsZGVyIiwgImV4cHJlc3Npb25CdWlsZGVyIiwgImpiIiwgImViIiwgImpzb25BcnJheUZyb20iLCAibW9ja1RhYmxlc1F1ZXJ5IiwgInNjaGVtYSIsICJmaWx0ZXJPcGVyYXRvcnMiLCAiY3JlYXRlU1FMaXRlQWRhcHRlciIsICJyZXF1aXJlbWVudHMiLCAiZXhlY3V0b3IiLCAib3RoZXJSZXF1aXJlbWVudHMiLCAiZGV0YWlscyIsICJvcHRpb25zIiwgInF1ZXJ5IiwgImdldERlbGV0ZVF1ZXJ5IiwgImVycm9yIiwgImNyZWF0ZUFkYXB0ZXJFcnJvciIsICJnZXRJbnNlcnRRdWVyeSIsICJyb3dzIiwgInRhYmxlc1F1ZXJ5IiwgImdldFRhYmxlc1F1ZXJ5IiwgInRhYmxlc0Vycm9yIiwgInRhYmxlcyIsICJjcmVhdGVJbnRyb3NwZWN0aW9uIiwgImdldFNlbGVjdFF1ZXJ5IiwgInJlc3VsdHMiLCAiZ2V0VXBkYXRlUXVlcnkiLCAicm93IiwgImFyZ3MiLCAic2NoZW1hcyIsICJ0YWJsZSIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJfc3FsIiwgImNvbHVtbnNSZWNvcmQiLCAiY29sdW1uIiwgImRhdGF0eXBlIiwgImZrX2NvbHVtbiIsICJjb2x1bW5OYW1lIiwgImFmZmluaXR5IiwgImRldGVybWluZUNvbHVtbkFmZmluaXR5IiwgIlNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQSIsICJtb2NrSW50cm9zcGVjdCIsICJtb2NrVGFibGVzUXVlcnkiXQp9Cg==
9
+ import{a as B}from"../../chunk-32BUC7NR.js";import{a as i}from"../../chunk-O6ZAHVDF.js";import{h as E,i as d,j as h,k as x,p as w,r as f,s as T,v as q}from"../../chunk-A6CVKSUD.js";import{e as s}from"../../chunk-GDQBQ7MK.js";s();s();s();var O={BLOB:{group:"raw"},INTEGER:{group:"numeric"},NULL:{group:"raw"},NUMERIC:{group:"numeric"},REAL:{group:"numeric"},TEXT:{group:"string"}};function L(r){if(!r)return"BLOB";let t=r.toUpperCase();return t.includes("INT")?"INTEGER":t.includes("TEXT")||t.includes("CHAR")||t.includes("CLOB")?"TEXT":t.includes("BLOB")?"BLOB":t.includes("REAL")||t.includes("FLOA")||t.includes("DOUB")?"REAL":"NUMERIC"}s();s();function y(r){return w({...r,Adapter:x,QueryCompiler:h})}function j(r,t){let{filter:l={after:"and",filters:[],kind:"FilterGroup"},pageIndex:o,pageSize:n,sortOrder:e,table:{columns:a,name:u}}=r,c=y(t),b=q(l.filters,a),p="__ps_agg__",A="__ps_count__",g=c.selectFrom(u).where(b).select(m=>m.cast(m.fn.coalesce(m.fn.countAll(),d.lit(0)),"text").as(A));return f(c.with(p,()=>g).selectFrom(u).innerJoin(p,m=>m.onTrue()).where(b).select(`${p}.${A}`).select(Object.keys(a)).$call(m=>e.reduce((k,Q)=>k.orderBy(Q.column,Q.direction),m)).limit(n).offset(d.lit(BigInt(o)*BigInt(n))))}function V(){return[{created_at:new Date("2025-01-26T21:56:12.345Z"),deleted_at:null,id:1,name:"John Doe",__ps_count__:"2",role:"admin",name_role:"Jonn Doe - admin"},{created_at:new Date("2025-01-26T20:56:12.345Z"),deleted_at:null,id:2,name:"Jane Doe",__ps_count__:"2",role:"poweruser",name_role:"Jane Doe - poweruser"}]}function D(r,t){let{rows:l,table:{columns:o,name:n}}=r,e=y(t);return f(e.deleteFrom(n).$call(T(l,o)).returning(Object.keys(o)).returning(I().as("__ps_deleted_at__")))}function S(r,t){let{table:{columns:l,name:o},rows:n}=r,e=y(t);return f(e.insertInto(o).values(n.map(a=>Object.keys(a).length===0?{[Object.keys(l)[0]]:null}:a)).returning(Object.keys(l)).returning(I().as("__ps_inserted_at__")))}function N(r,t){let{changes:l,row:o,table:{columns:n,name:e}}=r,a=y(t);return f(a.updateTable(e).set(l).$call(T([o],n)).returning(Object.keys(n)).returning(I().as("__ps_updated_at__")))}function I(){let r=E();return r.cast(r.cast(d`(julianday('now') - 2440587.5) * 86400000.0`,"integer"),"text")}s();s();function C(r){return d`(select coalesce(json_group_array(json_object(${d.join(P(r.toOperationNode(),"agg"))})), '[]') from ${r} as agg)`}function P(r,t){try{return B(r,t)}catch{throw new Error("SQLite 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 F(r){return f(y(r).selectFrom(E().fn("pragma_table_list",[]).as("tl")).leftJoin("sqlite_schema as ss",t=>t.onRef("ss.type","=","tl.type").onRef("ss.name","=","tl.name")).where("tl.type","in",["table","view"]).where("tl.schema","=","main").where("tl.name","not like","sqlite_%").select(["tl.name","ss.sql"]).select(t=>[C(t.selectFrom(t.fn("pragma_table_xinfo",["tl.name"]).as("txi")).leftJoin(t.fn("pragma_foreign_key_list",["tl.name"]).as("fkl"),"fkl.from","txi.name").where("txi.hidden","!=",1).select(["txi.name","txi.type as datatype","fkl.table as fk_table","fkl.to as fk_column"]).select(l=>[l("txi.hidden","in",[2,3]).as("computed"),l("txi.notnull","!=",0).as("nullable"),l("txi.pk","!=",0).as("pk")])).as("columns")]),{transformations:{columns:"json-parse"}})}function U(){return[{name:"animals",sql:"CREATE TABLE animals (id INTEGER PRIMARY KEY, name TEXT);",columns:[{name:"id",datatype:"INTEGER",pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"name",datatype:"TEXT",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]},{name:"users",sql:"CREATE TABLE users (id UUID PRIMARY KEY, created_at TIMESTAMP, deleted_at TIMESTAMP, role varchar, name varchar, name_role text);",columns:[{name:"id",datatype:"UUID",pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"created_at",datatype:"TIMESTAMP",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"deleted_at",datatype:"TIMESTAMP",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"role",datatype:"varchar",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"name",datatype:"varchar",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"name_role",datatype:"text",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]},{name:"composite_pk",sql:"CREATE TABLE composite_pk (id UUID, name TEXT, created_at timestamp, PRIMARY KEY (id, name));",columns:[{name:"id",datatype:"UUID",pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"name",datatype:"TEXT",pk:1,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"created_at",datatype:"timestamp",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]}]}var R="main",G=["=","!=",">",">=","<","<=","is","is not","like","not like"];function ye(r){let{executor:t,...l}=r;return{defaultSchema:R,async delete(o,n){try{let e=D(o,l),[a]=await t.execute(e,n);return a?i({error:a,query:e}):[null,{...o,query:e}]}catch(e){return i({error:e})}},async insert(o,n){try{let e=S(o,l),[a,u]=await t.execute(e,n);return a?i({error:a,query:e}):[null,{rows:u,query:e}]}catch(e){return i({error:e})}},async introspect(o){try{let n=F(r),[e,a]=await t.execute(n,o);return e?i({error:e,query:n}):[null,M({query:n,tables:a})]}catch(n){return i({error:n})}},async query(o,n){try{let e=j(o,l),[a,u]=await t.execute(e,n);return a?i({error:a,query:e}):[null,{filteredRowCount:u[0]?.__ps_count__||"0",rows:u,query:e}]}catch(e){return i({error:e})}},async update(o,n){try{let e=N(o,l),[a,u]=await t.execute(e,n);if(a)return i({error:a,query:e});let[c]=u;return c?[null,{row:c,query:e}]:i({error:new Error("Update failed"),query:e})}catch(e){return i({error:e})}}}}function M(r){let{tables:t,query:l}=r;return{filterOperators:G,query:l,schemas:t.reduce((o,n)=>{let{columns:e,name:a,sql:u}=n,c=e.reduce((b,p)=>{let{datatype:A,fk_column:g,name:m}=p,k=L(A);return b[m]={datatype:{...O[k],affinity:k,isArray:!1,isNative:!0,name:A,options:[],schema:R},fkColumn:g,fkSchema:g?R:null,fkTable:p.fk_table,isAutoincrement:!1,isComputed:!!p.computed,isInPrimaryKey:!!p.pk,name:m,nullable:!!p.nullable,schema:R,table:a},b},{});return o.main.tables[a]={columns:c,name:a,schema:"main"},o},{main:{tables:{},name:"main"}}),timezone:"UTC"}}function _e(){let r={parameters:[],sql:"<mocked>"},t=U();return M({query:r,tables:t})}export{ye as createSQLiteAdapter,D as getDeleteQuery,S as getInsertQuery,j as getSelectQuery,F as getTablesQuery,N as getUpdateQuery,_e as mockIntrospect,V as mockSelectQuery,U as mockTablesQuery};
10
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9pbmRleC50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2FkYXB0ZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2RtbC50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2J1aWxkZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9zcWxpdGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RtbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRGVsZXRlUmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJFcnJvcixcbiAgdHlwZSBBZGFwdGVySW5zZXJ0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJRdWVyeVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyUmVxdWlyZW1lbnRzLFxuICB0eXBlIEFkYXB0ZXJVcGRhdGVSZXN1bHQsXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVpdGhlciB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eSwgU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBIH0gZnJvbSBcIi4vZGF0YXR5cGVcIjtcbmltcG9ydCB7IGdldERlbGV0ZVF1ZXJ5LCBnZXRJbnNlcnRRdWVyeSwgZ2V0U2VsZWN0UXVlcnksIGdldFVwZGF0ZVF1ZXJ5IH0gZnJvbSBcIi4vZG1sXCI7XG5pbXBvcnQgeyBnZXRUYWJsZXNRdWVyeSwgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzID0gQWRhcHRlclJlcXVpcmVtZW50cztcblxuY29uc3Qgc2NoZW1hID0gXCJtYWluXCI7XG5cbmNvbnN0IGZpbHRlck9wZXJhdG9ycyA9IFtcbiAgXCI9XCIsXG4gIFwiIT1cIixcbiAgXCI+XCIsXG4gIFwiPj1cIixcbiAgXCI8XCIsXG4gIFwiPD1cIixcbiAgXCJpc1wiLFxuICBcImlzIG5vdFwiLFxuICBcImxpa2VcIixcbiAgXCJub3QgbGlrZVwiLFxuXSBzYXRpc2ZpZXMgRmlsdGVyT3BlcmF0b3JbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNRTGl0ZUFkYXB0ZXIocmVxdWlyZW1lbnRzOiBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLm90aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0U2NoZW1hOiBzY2hlbWEsXG5cbiAgICBhc3luYyBkZWxldGUoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckRlbGV0ZVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0RGVsZXRlUXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIC8vIFRPRE86IHVzZSByZXN1bHRzIHRvby5cbiAgICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgLi4uZGV0YWlscywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBpbnNlcnQoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckluc2VydFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0SW5zZXJ0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIGNvbnN0IFtlcnJvciwgcm93c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3MsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbdGFibGVzRXJyb3IsIHRhYmxlc10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHRhYmxlc1F1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAodGFibGVzRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRhYmxlc0Vycm9yLCBxdWVyeTogdGFibGVzUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeTogdGFibGVzUXVlcnksIHRhYmxlcyB9KV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBxdWVyeShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyUXVlcnlSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFNlbGVjdFF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyBmaWx0ZXJlZFJvd0NvdW50OiByZXN1bHRzWzBdPy5fX3BzX2NvdW50X18gfHwgXCIwXCIsIHJvd3M6IHJlc3VsdHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyVXBkYXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRVcGRhdGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcm93XSA9IHJlc3VsdHM7XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjdXN0b20gZXJyb3I/XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJVcGRhdGUgZmFpbGVkXCIpLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3csIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnRyb3NwZWN0aW9uKGFyZ3M6IHtcbiAgdGFibGVzOiBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xuICBxdWVyeTogUXVlcnk7XG59KTogQWRhcHRlckludHJvc3BlY3RSZXN1bHQge1xuICBjb25zdCB7IHRhYmxlcywgcXVlcnk6IHRhYmxlc1F1ZXJ5IH0gPSBhcmdzO1xuXG4gIHJldHVybiB7XG4gICAgZmlsdGVyT3BlcmF0b3JzLFxuICAgIHF1ZXJ5OiB0YWJsZXNRdWVyeSxcbiAgICBzY2hlbWFzOiB0YWJsZXMucmVkdWNlKFxuICAgICAgKHNjaGVtYXMsIHRhYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzcWw6IF9zcWwgfSA9IHRhYmxlO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zLnJlZHVjZShcbiAgICAgICAgICAoY29sdW1ucywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGF0eXBlLCBma19jb2x1bW4sIG5hbWU6IGNvbHVtbk5hbWUgfSA9IGNvbHVtbjtcblxuICAgICAgICAgICAgY29uc3QgYWZmaW5pdHkgPSBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eShkYXRhdHlwZSk7XG5cbiAgICAgICAgICAgIGNvbHVtbnNbY29sdW1uTmFtZV0gPSB7XG4gICAgICAgICAgICAgIGRhdGF0eXBlOiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogd29ydGggZXhwbG9yaW5nIHN0aWxsIHZpYmluZyB3aXRoIHRoZSBkZWNsYXJlZCBkYXRhIHR5cGUgZm9yIHN0dWZmIGxpa2UgZGF0ZXMgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgICAgICAgICAuLi5TUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEFbYWZmaW5pdHldLFxuICAgICAgICAgICAgICAgIGFmZmluaXR5LFxuICAgICAgICAgICAgICAgIGlzQXJyYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzTmF0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6IGRhdGF0eXBlLFxuICAgICAgICAgICAgICAgIC8vIFRPRE86IHVzZSBgdGFibGUuc3FsYCB0byBkZXRlcm1pbmUgZW51bSBvcHRpb25zIGZyb20gYGNoZWNrYCBjb25zdHJhaW50cy5cbiAgICAgICAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZrQ29sdW1uOiBma19jb2x1bW4sXG4gICAgICAgICAgICAgIGZrU2NoZW1hOiBma19jb2x1bW4gPyBzY2hlbWEgOiBudWxsLFxuICAgICAgICAgICAgICBma1RhYmxlOiBjb2x1bW4uZmtfdGFibGUsXG4gICAgICAgICAgICAgIC8vIFRPRE86IHVzZSBgdGFibGUuc3FsYCB0byBkZXRlcm1pbmUgYXV0b2luY3JlbWVudFxuICAgICAgICAgICAgICBpc0F1dG9pbmNyZW1lbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICBpc0NvbXB1dGVkOiBCb29sZWFuKGNvbHVtbi5jb21wdXRlZCksXG4gICAgICAgICAgICAgIGlzSW5QcmltYXJ5S2V5OiBCb29sZWFuKGNvbHVtbi5wayksXG4gICAgICAgICAgICAgIG5hbWU6IGNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgIG51bGxhYmxlOiBCb29sZWFuKGNvbHVtbi5udWxsYWJsZSksXG4gICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICAgdGFibGU6IHRhYmxlTmFtZSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30gYXMgVGFibGVbXCJjb2x1bW5zXCJdLFxuICAgICAgICApO1xuXG4gICAgICAgIHNjaGVtYXMubWFpbiEudGFibGVzW3RhYmxlTmFtZV0gPSB7XG4gICAgICAgICAgY29sdW1uczogY29sdW1uc1JlY29yZCxcbiAgICAgICAgICBuYW1lOiB0YWJsZU5hbWUsXG4gICAgICAgICAgc2NoZW1hOiBcIm1haW5cIixcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc2NoZW1hcztcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1haW46IHsgdGFibGVzOiB7fSwgbmFtZTogXCJtYWluXCIgfSxcbiAgICAgIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0W1wic2NoZW1hc1wiXSBhcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdFtcInNjaGVtYXNcIl0sXG4gICAgKSxcbiAgICB0aW1lem9uZTogXCJVVENcIixcbiAgfTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tJbnRyb3NwZWN0KCkge1xuICBjb25zdCBxdWVyeSA9IHsgcGFyYW1ldGVyczogW10sIHNxbDogXCI8bW9ja2VkPlwiIH0gYXMgUXVlcnk7XG4gIGNvbnN0IHRhYmxlcyA9IG1vY2tUYWJsZXNRdWVyeSgpO1xuXG4gIHJldHVybiBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgcXVlcnksIHRhYmxlcyB9KSBhcyB7XG4gICAgLy8gYmVzdCBlZmZvcnQsIG5vIG5lZWQgZ28gb3ZlcmJvYXJkLlxuICAgIHNjaGVtYXM6IHtcbiAgICAgIG1haW46IHtcbiAgICAgICAgbmFtZTogXCJtYWluXCI7XG4gICAgICAgIHRhYmxlczoge1xuICAgICAgICAgIFtUIGluICh0eXBlb2YgdGFibGVzKVtudW1iZXJdW1wibmFtZVwiXV06IFRhYmxlO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9O1xuICAgIHRpbWV6b25lOiBzdHJpbmc7XG4gICAgZmlsdGVyT3BlcmF0b3JzOiBGaWx0ZXJPcGVyYXRvcltdO1xuICAgIHF1ZXJ5OiBRdWVyeTtcbiAgfSBzYXRpc2ZpZXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCB0eXBlIFNRTGl0ZUFmZmluaXR5ID0gXCJCTE9CXCIgfCBcIklOVEVHRVJcIiB8IFwiTlVMTFwiIHwgXCJOVU1FUklDXCIgfCBcIlJFQUxcIiB8IFwiVEVYVFwiO1xuXG5leHBvcnQgY29uc3QgU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBOiBSZWNvcmQ8U1FMaXRlQWZmaW5pdHksIFBpY2s8RGF0YVR5cGUsIFwiZ3JvdXBcIj4+ID0ge1xuICBCTE9COiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIElOVEVHRVI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIE5VTEw6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgTlVNRVJJQzoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgUkVBTDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgVEVYVDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxufTtcblxuLyoqXG4gKiBodHRwczovL3NxbGl0ZS5vcmcvZGF0YXR5cGUzLmh0bWwjZGV0ZXJtaW5hdGlvbl9vZl9jb2x1bW5fYWZmaW5pdHlcbiAqXG4gKiBETyBOT1QgQ0hBTkdFIFRIRSBPUkRFUiBPRiBUSEUgQ0hFQ0tTIElOIFRISVMgRlVOQ1RJT04hXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eShkZWNsYXJlZERhdGFUeXBlOiBzdHJpbmcgfCBudWxsKTogU1FMaXRlQWZmaW5pdHkge1xuICBpZiAoIWRlY2xhcmVkRGF0YVR5cGUpIHtcbiAgICByZXR1cm4gXCJCTE9CXCI7XG4gIH1cblxuICBjb25zdCB1cHBlclR5cGUgPSBkZWNsYXJlZERhdGFUeXBlLnRvVXBwZXJDYXNlKCk7XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIklOVFwiKSkge1xuICAgIHJldHVybiBcIklOVEVHRVJcIjtcbiAgfVxuXG4gIGlmICh1cHBlclR5cGUuaW5jbHVkZXMoXCJURVhUXCIpIHx8IHVwcGVyVHlwZS5pbmNsdWRlcyhcIkNIQVJcIikgfHwgdXBwZXJUeXBlLmluY2x1ZGVzKFwiQ0xPQlwiKSkge1xuICAgIHJldHVybiBcIlRFWFRcIjtcbiAgfVxuXG4gIGlmICh1cHBlclR5cGUuaW5jbHVkZXMoXCJCTE9CXCIpKSB7XG4gICAgcmV0dXJuIFwiQkxPQlwiO1xuICB9XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIlJFQUxcIikgfHwgdXBwZXJUeXBlLmluY2x1ZGVzKFwiRkxPQVwiKSB8fCB1cHBlclR5cGUuaW5jbHVkZXMoXCJET1VCXCIpKSB7XG4gICAgcmV0dXJuIFwiUkVBTFwiO1xuICB9XG5cbiAgcmV0dXJuIFwiTlVNRVJJQ1wiO1xufVxuIiwgImltcG9ydCB7IGV4cHJlc3Npb25CdWlsZGVyLCB0eXBlIEluZmVyUmVzdWx0LCBzcWwgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgeyBTaW1wbGVSZWZlcmVuY2VFeHByZXNzaW9uIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgdHlwZSB7IEFkYXB0ZXJEZWxldGVEZXRhaWxzLCBBZGFwdGVySW5zZXJ0RGV0YWlscywgQWRhcHRlclF1ZXJ5RGV0YWlscywgQWRhcHRlclVwZGF0ZURldGFpbHMgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHsgYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMsIHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgY29tcGlsZSwgZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHR5cGUgeyBCaWdJbnRTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZS11dGlsc1wiO1xuaW1wb3J0IHsgZ2V0U1FMaXRlQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcbmltcG9ydCB7IG1vY2tUYWJsZXNRdWVyeSB9IGZyb20gXCIuL2ludHJvc3BlY3Rpb25cIjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBzZWxlY3RzIGFsbCBjb2x1bW5zIGZyb20gYSB0YWJsZSB3aXRoIGFuIHVuYm91bmQgcm93IGNvdW50IGFzIGBfX3BzX2NvdW50X19gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJRdWVyeURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGZpbHRlciA9IHsgYWZ0ZXI6IFwiYW5kXCIsIGZpbHRlcnM6IFtdLCBraW5kOiBcIkZpbHRlckdyb3VwXCIgfSxcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydE9yZGVyLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0U1FMaXRlQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgY29uc3QgZmlsdGVyRXhwcmVzc2lvbiA9IGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oZmlsdGVyLmZpbHRlcnMsIGNvbHVtbnMpO1xuXG4gIGNvbnN0IEFHR19OQU1FID0gXCJfX3BzX2FnZ19fXCI7XG4gIGNvbnN0IENPVU5UX1JFRiA9IFwiX19wc19jb3VudF9fXCI7XG5cbiAgY29uc3QgY291bnRRdWVyeSA9IGJ1aWxkZXJcbiAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgLnNlbGVjdCgoZWIpID0+IGViLmNhc3Q8QmlnSW50U3RyaW5nPihlYi5mbi5jb2FsZXNjZShlYi5mbi5jb3VudEFsbCgpLCBzcWwubGl0KDApKSwgXCJ0ZXh0XCIpLmFzKENPVU5UX1JFRikpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoKEFHR19OQU1FLCAoKSA9PiBjb3VudFF1ZXJ5KVxuICAgICAgLnNlbGVjdEZyb20odGFibGVOYW1lKVxuICAgICAgLmlubmVySm9pbihBR0dfTkFNRSwgKGpiKSA9PiBqYi5vblRydWUoKSlcbiAgICAgIC8vIFRPRE86IGN1cnNvciBwYWdpbmF0aW9uP1xuICAgICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgICAuc2VsZWN0KFxuICAgICAgICBgJHtBR0dfTkFNRX0uJHtDT1VOVF9SRUZ9YCBzYXRpc2ZpZXMgU2ltcGxlUmVmZXJlbmNlRXhwcmVzc2lvbjxcbiAgICAgICAgICB7IFtBR0dfTkFNRV06IEluZmVyUmVzdWx0PHR5cGVvZiBjb3VudFF1ZXJ5PltudW1iZXJdIH0sXG4gICAgICAgICAgdHlwZW9mIEFHR19OQU1FXG4gICAgICAgID4sXG4gICAgICApXG4gICAgICAuc2VsZWN0KE9iamVjdC5rZXlzKGNvbHVtbnMpKVxuICAgICAgLiRjYWxsKChxYikgPT4gc29ydE9yZGVyLnJlZHVjZSgocWIsIGl0ZW0pID0+IHFiLm9yZGVyQnkoaXRlbS5jb2x1bW4sIGl0ZW0uZGlyZWN0aW9uKSwgcWIpKVxuICAgICAgLmxpbWl0KHBhZ2VTaXplKVxuICAgICAgLy8gd2UncmUgaW5qZWN0aW5nIHRoZSBvZmZzZXQgdmFsdWUgaGVyZSB0byBhdm9pZCBzZXJpYWxpemF0aW9uIGNvbXBsZXhpdHkgKGBiaWdpbnRgIGlzIGEgbm8tZ28gZm9yIGBKU09OLnN0cmluZ2lmeWApLlxuICAgICAgLm9mZnNldChzcWwubGl0KEJpZ0ludChwYWdlSW5kZXgpICogQmlnSW50KHBhZ2VTaXplKSkpLFxuICApO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1NlbGVjdFF1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKFwiMjAyNS0wMS0yNlQyMTo1NjoxMi4zNDVaXCIpLFxuICAgICAgZGVsZXRlZF9hdDogbnVsbCxcbiAgICAgIGlkOiAxLFxuICAgICAgbmFtZTogXCJKb2huIERvZVwiLFxuICAgICAgX19wc19jb3VudF9fOiBcIjJcIixcbiAgICAgIHJvbGU6IFwiYWRtaW5cIixcbiAgICAgIG5hbWVfcm9sZTogXCJKb25uIERvZSAtIGFkbWluXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjA6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMixcbiAgICAgIG5hbWU6IFwiSmFuZSBEb2VcIixcbiAgICAgIF9fcHNfY291bnRfXzogXCIyXCIsXG4gICAgICByb2xlOiBcInBvd2VydXNlclwiLFxuICAgICAgbmFtZV9yb2xlOiBcIkphbmUgRG9lIC0gcG93ZXJ1c2VyXCIsXG4gICAgfSxcbiAgXSBhcyBjb25zdCBzYXRpc2ZpZXMge1xuICAgIC8vIGJlc3QgZWZmb3J0IG5vIG5lZWQgdG8gZ28gb3ZlcmJvYXJkXG4gICAgW0sgaW4gUmV0dXJuVHlwZTx0eXBlb2YgbW9ja1RhYmxlc1F1ZXJ5PlsxXVtcImNvbHVtbnNcIl1bbnVtYmVyXVtcIm5hbWVcIl0gfCBcIl9fcHNfY291bnRfX1wiXTogdW5rbm93bjtcbiAgfVtdO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IGRlbGV0ZXMgYSBnaXZlbiBzZXQgb2Ygcm93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyRGVsZXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgcm93cyxcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFNRTGl0ZUJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC5kZWxldGVGcm9tKHRhYmxlTmFtZSlcbiAgICAgIC4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhyb3dzLCBjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfZGVsZXRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIG9uZSBvciBtb3JlIHJvd3MgaW50byBhIHRhYmxlIGFuZCByZXR1cm5zIHRoZSBpbnNlcnRlZCByb3dzIGFsb25nIHdpdGggdGhlaXIgYGN0aWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJJbnNlcnREZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgICByb3dzLFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0U1FMaXRlQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLmluc2VydEludG8odGFibGVOYW1lKVxuICAgICAgLnZhbHVlcyhyb3dzLm1hcCgocm93KSA9PiAoT2JqZWN0LmtleXMocm93KS5sZW5ndGggPT09IDAgPyB7IFtPYmplY3Qua2V5cyhjb2x1bW5zKVswXSFdOiBudWxsIH0gOiByb3cpKSlcbiAgICAgIC5yZXR1cm5pbmcoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfaW5zZXJ0ZWRfYXRfX1wiKSksXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgdXBkYXRlcyBhIGdpdmVuIHJvdyBpbiBhIHRhYmxlIHdpdGggZ2l2ZW4gY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgY2hhbmdlcyxcbiAgICByb3csXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRTUUxpdGVCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAudXBkYXRlVGFibGUodGFibGVOYW1lKVxuICAgICAgLnNldChjaGFuZ2VzKVxuICAgICAgLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKFtyb3ddLCBjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfdXBkYXRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpIHtcbiAgY29uc3QgZWIgPSBleHByZXNzaW9uQnVpbGRlcigpO1xuXG4gIHJldHVybiBlYi5jYXN0PEJpZ0ludFN0cmluZz4oZWIuY2FzdChzcWxgKGp1bGlhbmRheSgnbm93JykgLSAyNDQwNTg3LjUpICogODY0MDAwMDAuMGAsIFwiaW50ZWdlclwiKSwgXCJ0ZXh0XCIpO1xufVxuIiwgImltcG9ydCB7IHR5cGUgS3lzZWx5LCBTcWxpdGVBZGFwdGVyLCBTcWxpdGVRdWVyeUNvbXBpbGVyIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGdldEJ1aWxkZXIgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRTUUxpdGVCdWlsZGVyPERhdGFiYXNlID0gYW55PihcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbik6IEt5c2VseTxEYXRhYmFzZT4ge1xuICByZXR1cm4gZ2V0QnVpbGRlcjxEYXRhYmFzZT4oe1xuICAgIC4uLnJlcXVpcmVtZW50cyxcbiAgICBBZGFwdGVyOiBTcWxpdGVBZGFwdGVyLFxuICAgIFF1ZXJ5Q29tcGlsZXI6IFNxbGl0ZVF1ZXJ5Q29tcGlsZXIsXG4gIH0pO1xufVxuIiwgIi8qKlxuICogU1FMaXRlIGludHJvc3BlY3Rpb24gcXVlcmllcyB0byBiZSB1c2VkIGJ5IHRoZSBTUUxpdGUgYWRhcHRlcidzIGludHJvc3BlY3QgbWV0aG9kLlxuICogQG1vZHVsZSBzcWxpdGUtY29yZS9pbnRyb3NwZWN0aW9uXG4gKlxuICogUmVmZXJlbmNlczpcbiAqIGh0dHBzOi8vc3FsaXRlLm9yZy9wcmFnbWEuaHRtbFxuICogaHR0cHM6Ly9zcWxpdGUub3JnL3NjaGVtYXRhYi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZXhwcmVzc2lvbkJ1aWxkZXIgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSBcImt5c2VseS9oZWxwZXJzL3NxbGl0ZVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGNvbXBpbGUsIHR5cGUgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB7IGdldFNRTGl0ZUJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5cbmludGVyZmFjZSBEYXRhYmFzZSB7XG4gIC8qKiB0aGUgbWFpbiBzeXN0ZW0gdGFibGUgKi9cbiAgc3FsaXRlX3NjaGVtYToge1xuICAgIC8qKiBvYmplY3QgbmFtZSAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogcGFnZSBudW1iZXIgaW4gcm9vdCBpbmRleCB3aGVuIG9iamVjdCBpcyBhIHRhYmxlLiAqL1xuICAgIHJvb3RwYWdlOiBudW1iZXI7XG4gICAgLyoqIHNxbCBzdGF0ZW1lbnQgdGhhdCBjYW4gcmVjcmVhdGUgdGhlIG9iamVjdC4gbnVsbCB3aGVuIGludGVybmFsIGluZGV4IG9iamVjdC4gKi9cbiAgICBzcWw6IHN0cmluZyB8IG51bGw7XG4gICAgLyoqIHJlbGF0ZWQgdGFibGUvdmlldyBuYW1lIHdoZW4gb2JqZWN0IGlzIGFuIGluZGV4L3RyaWdnZXIuICovXG4gICAgdGJsX25hbWU6IHN0cmluZztcbiAgICAvKiogb2JqZWN0IHR5cGUgKi9cbiAgICB0eXBlOiBcImluZGV4XCIgfCBcInRhYmxlXCIgfCBcInRyaWdnZXJcIiB8IFwidmlld1wiO1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBzaGFwZSBvZiBlYWNoIHJvdyByZXR1cm5lZCBieSBgcHJhZ21hX3RhYmxlX2xpc3QodGFibGVOYW1lPylgLlxuICovXG5pbnRlcmZhY2UgUHJhZ21hVGFibGVMaXN0IHtcbiAgLyoqIG9iamVjdCBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIHNjaGVtYSBuYW1lICovXG4gIHNjaGVtYTogXCJtYWluXCIgfCBcInRlbXBcIjtcbiAgLyoqIG9iamVjdCB0eXBlICovXG4gIHR5cGU6IFwic2hhZG93XCIgfCBcInRhYmxlXCIgfCBcInZpZXdcIiB8IFwidmlydHVhbFwiO1xufVxuXG4vKipcbiAqIFRoZSBzaGFwZSBvZiBlYWNoIHJvdyByZXR1cm5lZCBieSBgcHJhZ21hX3RhYmxlX3hpbmZvKHRhYmxlTmFtZSlgLlxuICovXG5pbnRlcmZhY2UgUHJhZ21hVGFibGVYSW5mbyB7XG4gIC8qKiBcInJhbmsgd2l0aGluIGN1cnJlbnQgcmVzdWx0IHNldFwiICovXG4gIGNpZDogbnVtYmVyO1xuICAvKiogZGVmYXVsdCB2YWx1ZSAqL1xuICBkZmx0X3ZhbHVlOiB1bmtub3duO1xuICAvKiogMCAtIG5vcm1hbCwgMSAtIGhpZGRlbiwgMi0zIC0gZHluYW1pYy9zdG9yZWQgZ2VuZXJhdGVkICovXG4gIGhpZGRlbjogMCB8IDEgfCAyIHwgMztcbiAgLyoqIGNvbHVtbiBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIHdoZXRoZXIgdGhlIGNvbHVtbiBjYW4gYmUgbnVsbCAqL1xuICBub3RudWxsOiAwIHwgMTtcbiAgLyoqIDAgaWYgbm90IHBhcnQgb2YgdGhlIHByaW1hcnkga2V5LCBvdGhlcndpc2UgdGhlIDEtYmFzZWQgb3JkaW5hbCBudW1iZXIgb2YgdGhlIGNvbHVtbiBpbiB0aGUgcHJpbWFyeSBrZXkgKi9cbiAgcGs6IG51bWJlcjtcbiAgLyoqIGRhdGEgdHlwZSAqL1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHNoYXBlIG9mIGVhY2ggcm93IHJldHVybmVkIGJ5IGBwcmFnbWFfZm9yZWlnbl9rZXlfbGlzdCh0YWJsZU5hbWUpYC5cbiAqL1xuaW50ZXJmYWNlIFByYWdtYUZvcmVpZ25LZXlMaXN0IHtcbiAgLyoqIGNvbHVtbiBuYW1lICovXG4gIGZyb206IHN0cmluZztcbiAgLyoqIG9yZGluYWwgbnVtYmVyIG9mIGNvbHVtbiB3aXRoaW4gdGhlIGZvcmVpZ24ga2V5ICovXG4gIHNlcTogbnVtYmVyO1xuICAvKiogZm9yZWlnbiB0YWJsZSBuYW1lICovXG4gIHRhYmxlOiBzdHJpbmc7XG4gIC8qKiBjb2x1bW4gbmFtZSBpbiB0aGUgZm9yZWlnbiB0YWJsZSAqL1xuICB0bzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPikge1xuICByZXR1cm4gY29tcGlsZShcbiAgICBnZXRTUUxpdGVCdWlsZGVyPERhdGFiYXNlPihyZXF1aXJlbWVudHMpXG4gICAgICAuc2VsZWN0RnJvbShleHByZXNzaW9uQnVpbGRlcigpLmZuPFByYWdtYVRhYmxlTGlzdD4oXCJwcmFnbWFfdGFibGVfbGlzdFwiLCBbXSkuYXMoXCJ0bFwiKSlcbiAgICAgIC5sZWZ0Sm9pbihcInNxbGl0ZV9zY2hlbWEgYXMgc3NcIiwgKGpiKSA9PiBqYi5vblJlZihcInNzLnR5cGVcIiwgXCI9XCIsIFwidGwudHlwZVwiKS5vblJlZihcInNzLm5hbWVcIiwgXCI9XCIsIFwidGwubmFtZVwiKSlcbiAgICAgIC53aGVyZShcInRsLnR5cGVcIiwgXCJpblwiLCBbXCJ0YWJsZVwiLCBcInZpZXdcIl0pXG4gICAgICAvLyBleGNsdWRlIHRlbXBvcmFyeSB0YWJsZXMvdmlld3NcbiAgICAgIC53aGVyZShcInRsLnNjaGVtYVwiLCBcIj1cIiwgXCJtYWluXCIpXG4gICAgICAvLyBleGNsdWRlIHN5c3RlbSB0YWJsZXMvdmlld3NcbiAgICAgIC53aGVyZShcInRsLm5hbWVcIiwgXCJub3QgbGlrZVwiLCBcInNxbGl0ZV8lXCIpXG4gICAgICAuc2VsZWN0KFtcInRsLm5hbWVcIiwgXCJzcy5zcWxcIl0pXG4gICAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAgICBqc29uQXJyYXlGcm9tKFxuICAgICAgICAgIGViXG4gICAgICAgICAgICAuc2VsZWN0RnJvbShlYi5mbjxQcmFnbWFUYWJsZVhJbmZvPihcInByYWdtYV90YWJsZV94aW5mb1wiLCBbXCJ0bC5uYW1lXCJdKS5hcyhcInR4aVwiKSlcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcbiAgICAgICAgICAgICAgZWIuZm48UHJhZ21hRm9yZWlnbktleUxpc3Q+KFwicHJhZ21hX2ZvcmVpZ25fa2V5X2xpc3RcIiwgW1widGwubmFtZVwiXSkuYXMoXCJma2xcIiksXG4gICAgICAgICAgICAgIFwiZmtsLmZyb21cIixcbiAgICAgICAgICAgICAgXCJ0eGkubmFtZVwiLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gZXhjbHVkZSBoaWRkZW4gY29sdW1uc1xuICAgICAgICAgICAgLndoZXJlKFwidHhpLmhpZGRlblwiLCBcIiE9XCIsIDEpXG4gICAgICAgICAgICAuc2VsZWN0KFtcInR4aS5uYW1lXCIsIFwidHhpLnR5cGUgYXMgZGF0YXR5cGVcIiwgXCJma2wudGFibGUgYXMgZmtfdGFibGVcIiwgXCJma2wudG8gYXMgZmtfY29sdW1uXCJdKVxuICAgICAgICAgICAgLnNlbGVjdCgoZWIpID0+IFtcbiAgICAgICAgICAgICAgZWIoXCJ0eGkuaGlkZGVuXCIsIFwiaW5cIiwgWzIsIDNdKS5hcyhcImNvbXB1dGVkXCIpLFxuICAgICAgICAgICAgICBlYihcInR4aS5ub3RudWxsXCIsIFwiIT1cIiwgMCkuYXMoXCJudWxsYWJsZVwiKSxcbiAgICAgICAgICAgICAgZWIoXCJ0eGkucGtcIiwgXCIhPVwiLCAwKS5hcyhcInBrXCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICkuYXMoXCJjb2x1bW5zXCIpLFxuICAgICAgXSksXG4gICAgeyB0cmFuc2Zvcm1hdGlvbnM6IHsgY29sdW1uczogXCJqc29uLXBhcnNlXCIgfSB9LFxuICApO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RhYmxlc1F1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiYW5pbWFsc1wiLFxuICAgICAgc3FsOiBcIkNSRUFURSBUQUJMRSBhbmltYWxzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBuYW1lIFRFWFQpO1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIklOVEVHRVJcIixcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJURVhUXCIsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidXNlcnNcIixcbiAgICAgIHNxbDogXCJDUkVBVEUgVEFCTEUgdXNlcnMgKGlkIFVVSUQgUFJJTUFSWSBLRVksIGNyZWF0ZWRfYXQgVElNRVNUQU1QLCBkZWxldGVkX2F0IFRJTUVTVEFNUCwgcm9sZSB2YXJjaGFyLCBuYW1lIHZhcmNoYXIsIG5hbWVfcm9sZSB0ZXh0KTtcIixcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJVVUlEXCIsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVElNRVNUQU1QXCIsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJkZWxldGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVElNRVNUQU1QXCIsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyb2xlXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidmFyY2hhclwiLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInZhcmNoYXJcIixcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVfcm9sZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb21wb3NpdGVfcGtcIixcbiAgICAgIHNxbDogXCJDUkVBVEUgVEFCTEUgY29tcG9zaXRlX3BrIChpZCBVVUlELCBuYW1lIFRFWFQsIGNyZWF0ZWRfYXQgdGltZXN0YW1wLCBQUklNQVJZIEtFWSAoaWQsIG5hbWUpKTtcIixcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJVVUlEXCIsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVEVYVFwiLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXSBhcyBjb25zdCBzYXRpc2ZpZXMgUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRhYmxlc1F1ZXJ5Pjtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc3FsaXRlLmQudHNcIiAvPlxuaW1wb3J0IHsgc3FsIH0gZnJvbSAnLi4vcmF3LWJ1aWxkZXIvc3FsLmpzJztcbmltcG9ydCB7IGdldEpzb25PYmplY3RBcmdzIH0gZnJvbSAnLi4vdXRpbC9qc29uLW9iamVjdC1hcmdzLmpzJztcbi8qKlxuICogQSBTUUxpdGUgaGVscGVyIGZvciBhZ2dyZWdhdGluZyBhIHN1YnF1ZXJ5IGludG8gYSBKU09OIGFycmF5LlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIG9ubHkgd29ya3MgY29ycmVjdGx5IGlmIHlvdSd2ZSBpbnN0YWxsZWQgdGhlIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYC5cbiAqIE90aGVyd2lzZSB0aGUgbmVzdGVkIHNlbGVjdGlvbnMgd2lsbCBiZSByZXR1cm5lZCBhcyBKU09OIHN0cmluZ3MuXG4gKlxuICogVGhlIHBsdWdpbiBjYW4gYmUgaW5zdGFsbGVkIGxpa2UgdGhpczpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0ICogYXMgU3FsaXRlIGZyb20gJ2JldHRlci1zcWxpdGUzJ1xuICogaW1wb3J0IHsgS3lzZWx5LCBQYXJzZUpTT05SZXN1bHRzUGx1Z2luLCBTcWxpdGVEaWFsZWN0IH0gZnJvbSAna3lzZWx5J1xuICogaW1wb3J0IHR5cGUgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gKlxuICogY29uc3QgZGIgPSBuZXcgS3lzZWx5PERhdGFiYXNlPih7XG4gKiAgIGRpYWxlY3Q6IG5ldyBTcWxpdGVEaWFsZWN0KHtcbiAqICAgICBkYXRhYmFzZTogbmV3IFNxbGl0ZSgnOm1lbW9yeTonKVxuICogICB9KSxcbiAqICAgcGx1Z2luczogW25ldyBQYXJzZUpTT05SZXN1bHRzUGx1Z2luKCldXG4gKiB9KVxuICogYGBgXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9zcWxpdGUnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQXJyYXlGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAub3JkZXJCeSgncGV0Lm5hbWUnKVxuICogICAgICkuYXMoJ3BldHMnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5wZXRzWzBdLnBldF9pZFxuICogcmVzdWx0WzBdPy5wZXRzWzBdLm5hbWVcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChTUUxpdGUpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwgKFxuICogICBzZWxlY3QgY29hbGVzY2UoanNvbl9ncm91cF9hcnJheShqc29uX29iamVjdChcbiAqICAgICAncGV0X2lkJywgXCJhZ2dcIi5cInBldF9pZFwiLFxuICogICAgICduYW1lJywgXCJhZ2dcIi5cIm5hbWVcIlxuICogICApKSwgJ1tdJykgZnJvbSAoXG4gKiAgICAgc2VsZWN0IFwicGV0XCIuXCJpZFwiIGFzIFwicGV0X2lkXCIsIFwicGV0XCIuXCJuYW1lXCJcbiAqICAgICBmcm9tIFwicGV0XCJcbiAqICAgICB3aGVyZSBcInBldFwiLlwib3duZXJfaWRcIiA9IFwicGVyc29uXCIuXCJpZFwiXG4gKiAgICAgb3JkZXIgYnkgXCJwZXRcIi5cIm5hbWVcIlxuICogICApIGFzIFwiYWdnXCJcbiAqICkgYXMgXCJwZXRzXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQXJyYXlGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGNvYWxlc2NlKGpzb25fZ3JvdXBfYXJyYXkoanNvbl9vYmplY3QoJHtzcWwuam9pbihnZXRTcWxpdGVKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnYWdnJykpfSkpLCAnW10nKSBmcm9tICR7ZXhwcn0gYXMgYWdnKWA7XG59XG4vKipcbiAqIEEgU1FMaXRlIGhlbHBlciBmb3IgdHVybmluZyBhIHN1YnF1ZXJ5IGludG8gYSBKU09OIG9iamVjdC5cbiAqXG4gKiBUaGUgc3VicXVlcnkgbXVzdCBvbmx5IHJldHVybiBvbmUgcm93LlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIG9ubHkgd29ya3MgY29ycmVjdGx5IGlmIHlvdSd2ZSBpbnN0YWxsZWQgdGhlIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYC5cbiAqIE90aGVyd2lzZSB0aGUgbmVzdGVkIHNlbGVjdGlvbnMgd2lsbCBiZSByZXR1cm5lZCBhcyBKU09OIHN0cmluZ3MuXG4gKlxuICogVGhlIHBsdWdpbiBjYW4gYmUgaW5zdGFsbGVkIGxpa2UgdGhpczpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0ICogYXMgU3FsaXRlIGZyb20gJ2JldHRlci1zcWxpdGUzJ1xuICogaW1wb3J0IHsgS3lzZWx5LCBQYXJzZUpTT05SZXN1bHRzUGx1Z2luLCBTcWxpdGVEaWFsZWN0IH0gZnJvbSAna3lzZWx5J1xuICogaW1wb3J0IHR5cGUgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gKlxuICogY29uc3QgZGIgPSBuZXcgS3lzZWx5PERhdGFiYXNlPih7XG4gKiAgIGRpYWxlY3Q6IG5ldyBTcWxpdGVEaWFsZWN0KHtcbiAqICAgICBkYXRhYmFzZTogbmV3IFNxbGl0ZSgnOm1lbW9yeTonKVxuICogICB9KSxcbiAqICAgcGx1Z2luczogW25ldyBQYXJzZUpTT05SZXN1bHRzUGx1Z2luKCldXG4gKiB9KVxuICogYGBgXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpzb25PYmplY3RGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvc3FsaXRlJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbk9iamVjdEZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC53aGVyZSgncGV0LmlzX2Zhdm9yaXRlJywgJz0nLCB0cnVlKVxuICogICAgICkuYXMoJ2Zhdm9yaXRlX3BldCcpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/LmZhdm9yaXRlX3BldD8ucGV0X2lkXG4gKiByZXN1bHRbMF0/LmZhdm9yaXRlX3BldD8ubmFtZVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCAoXG4gKiAgIHNlbGVjdCBqc29uX29iamVjdChcbiAqICAgICAncGV0X2lkJywgXCJvYmpcIi5cInBldF9pZFwiLFxuICogICAgICduYW1lJywgXCJvYmpcIi5cIm5hbWVcIlxuICogICApIGZyb20gKFxuICogICAgIHNlbGVjdCBcInBldFwiLlwiaWRcIiBhcyBcInBldF9pZFwiLCBcInBldFwiLlwibmFtZVwiXG4gKiAgICAgZnJvbSBcInBldFwiXG4gKiAgICAgd2hlcmUgXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIlxuICogICAgIGFuZCBcInBldFwiLlwiaXNfZmF2b3JpdGVcIiA9ID9cbiAqICAgKSBhcyBvYmpcbiAqICkgYXMgXCJmYXZvcml0ZV9wZXRcIlxuICogZnJvbSBcInBlcnNvblwiO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uT2JqZWN0RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCBqc29uX29iamVjdCgke3NxbC5qb2luKGdldFNxbGl0ZUpzb25PYmplY3RBcmdzKGV4cHIudG9PcGVyYXRpb25Ob2RlKCksICdvYmonKSl9KSBmcm9tICR7ZXhwcn0gYXMgb2JqKWA7XG59XG4vKipcbiAqIFRoZSBTUUxpdGUgYGpzb25fb2JqZWN0YCBmdW5jdGlvbi5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiB5b3UndmUgaW5zdGFsbGVkIHRoZSBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAuXG4gKiBPdGhlcndpc2UgdGhlIG5lc3RlZCBzZWxlY3Rpb25zIHdpbGwgYmUgcmV0dXJuZWQgYXMgSlNPTiBzdHJpbmdzLlxuICpcbiAqIFRoZSBwbHVnaW4gY2FuIGJlIGluc3RhbGxlZCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNxbGl0ZSBmcm9tICdiZXR0ZXItc3FsaXRlMydcbiAqIGltcG9ydCB7IEt5c2VseSwgUGFyc2VKU09OUmVzdWx0c1BsdWdpbiwgU3FsaXRlRGlhbGVjdCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICpcbiAqIGNvbnN0IGRiID0gbmV3IEt5c2VseTxEYXRhYmFzZT4oe1xuICogICBkaWFsZWN0OiBuZXcgU3FsaXRlRGlhbGVjdCh7XG4gKiAgICAgZGF0YWJhc2U6IG5ldyBTcWxpdGUoJzptZW1vcnk6JylcbiAqICAgfSksXG4gKiAgIHBsdWdpbnM6IFtuZXcgUGFyc2VKU09OUmVzdWx0c1BsdWdpbigpXVxuICogfSlcbiAqIGBgYFxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgeyBqc29uQnVpbGRPYmplY3QgfSBmcm9tICdreXNlbHkvaGVscGVycy9zcWxpdGUnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQnVpbGRPYmplY3Qoe1xuICogICAgICAgZmlyc3Q6IGViLnJlZignZmlyc3RfbmFtZScpLFxuICogICAgICAgbGFzdDogZWIucmVmKCdsYXN0X25hbWUnKSxcbiAqICAgICAgIGZ1bGw6IHNxbDxzdHJpbmc+YGZpcnN0X25hbWUgfHxcdTAwQTAnICcgfHwgbGFzdF9uYW1lYFxuICogICAgIH0pLmFzKCduYW1lJylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8ubmFtZS5maXJzdFxuICogcmVzdWx0WzBdPy5uYW1lLmxhc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5mdWxsXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoU1FMaXRlKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIGpzb25fb2JqZWN0KFxuICogICAnZmlyc3QnLCBmaXJzdF9uYW1lLFxuICogICAnbGFzdCcsIGxhc3RfbmFtZSxcbiAqICAgJ2Z1bGwnLCBcImZpcnN0X25hbWVcIiB8fCAnICcgfHwgXCJsYXN0X25hbWVcIlxuICogKSBhcyBcIm5hbWVcIlxuICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25CdWlsZE9iamVjdChvYmopIHtcbiAgICByZXR1cm4gc3FsIGBqc29uX29iamVjdCgke3NxbC5qb2luKE9iamVjdC5rZXlzKG9iaikuZmxhdE1hcCgoaykgPT4gW3NxbC5saXQoayksIG9ialtrXV0pKX0pYDtcbn1cbmZ1bmN0aW9uIGdldFNxbGl0ZUpzb25PYmplY3RBcmdzKG5vZGUsIHRhYmxlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGdldEpzb25PYmplY3RBcmdzKG5vZGUsIHRhYmxlKTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NRTGl0ZSBqc29uQXJyYXlGcm9tIGFuZCBqc29uT2JqZWN0RnJvbSBmdW5jdGlvbnMgY2FuIG9ubHkgaGFuZGxlIGV4cGxpY2l0IHNlbGVjdGlvbnMgZHVlIHRvIGxpbWl0YXRpb25zIG9mIHRoZSBqc29uX29iamVjdCBmdW5jdGlvbi4gc2VsZWN0QWxsKCkgaXMgbm90IGFsbG93ZWQgaW4gdGhlIHN1YnF1ZXJ5LicpO1xuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7O2lPQUFBQSxJQ0FBQyxJQ0FBQyxJQUlPLElBQU1DLEVBQStFLENBQzFGLEtBQU0sQ0FDSixNQUFPLEtBQ1QsRUFDQSxRQUFTLENBQ1AsTUFBTyxTQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sS0FDVCxFQUNBLFFBQVMsQ0FDUCxNQUFPLFNBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxTQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sUUFDVCxDQUNGLEVBT08sU0FBU0MsRUFBd0JDLEVBQWlELENBQ3ZGLEdBQUksQ0FBQ0EsRUFDSCxNQUFPLE9BR1QsSUFBTUMsRUFB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LElBQWlCLENBQy9CLElBQU03QixFQUFRLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSyxVQUFXLEVBQzFDUyxFQUFTcUIsRUFBZ0IsRUFFL0IsT0FBT3BCLEVBQW9CLENBQUUsTUFBQVYsRUFBTyxPQUFBUyxDQUFPLENBQUMsQ0FjOUMiLAogICJuYW1lcyI6IFsiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBIiwgImRldGVybWluZUNvbHVtbkFmZmluaXR5IiwgImRlY2xhcmVkRGF0YVR5cGUiLCAidXBwZXJUeXBlIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImdldFNRTGl0ZUJ1aWxkZXIiLCAicmVxdWlyZW1lbnRzIiwgImdldEJ1aWxkZXIiLCAiU3FsaXRlQWRhcHRlciIsICJTcWxpdGVRdWVyeUNvbXBpbGVyIiwgImdldFNlbGVjdFF1ZXJ5IiwgImRldGFpbHMiLCAicmVxdWlyZW1lbnRzIiwgImZpbHRlciIsICJwYWdlSW5kZXgiLCAicGFnZVNpemUiLCAic29ydE9yZGVyIiwgImNvbHVtbnMiLCAidGFibGVOYW1lIiwgImJ1aWxkZXIiLCAiZ2V0U1FMaXRlQnVpbGRlciIsICJmaWx0ZXJFeHByZXNzaW9uIiwgImdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24iLCAiQUdHX05BTUUiLCAiQ09VTlRfUkVGIiwgImNvdW50UXVlcnkiLCAiZWIiLCAic3FsIiwgImNvbXBpbGUiLCAiamIiLCAicWIiLCAiaXRlbSIsICJtb2NrU2VsZWN0UXVlcnkiLCAiZ2V0RGVsZXRlUXVlcnkiLCAicm93cyIsICJhcHBseUluZmVycmVkUm93RmlsdGVycyIsICJnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzIiwgImdldEluc2VydFF1ZXJ5IiwgInJvdyIsICJnZXRVcGRhdGVRdWVyeSIsICJjaGFuZ2VzIiwgImV4cHJlc3Npb25CdWlsZGVyIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImpzb25BcnJheUZyb20iLCAiZXhwciIsICJzcWwiLCAiZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MiLCAiZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MiLCAibm9kZSIsICJ0YWJsZSIsICJnZXRKc29uT2JqZWN0QXJncyIsICJnZXRUYWJsZXNRdWVyeSIsICJyZXF1aXJlbWVudHMiLCAiY29tcGlsZSIsICJnZXRTUUxpdGVCdWlsZGVyIiwgImV4cHJlc3Npb25CdWlsZGVyIiwgImpiIiwgImViIiwgImpzb25BcnJheUZyb20iLCAibW9ja1RhYmxlc1F1ZXJ5IiwgInNjaGVtYSIsICJmaWx0ZXJPcGVyYXRvcnMiLCAiY3JlYXRlU1FMaXRlQWRhcHRlciIsICJyZXF1aXJlbWVudHMiLCAiZXhlY3V0b3IiLCAib3RoZXJSZXF1aXJlbWVudHMiLCAiZGV0YWlscyIsICJvcHRpb25zIiwgInF1ZXJ5IiwgImdldERlbGV0ZVF1ZXJ5IiwgImVycm9yIiwgImNyZWF0ZUFkYXB0ZXJFcnJvciIsICJnZXRJbnNlcnRRdWVyeSIsICJyb3dzIiwgInRhYmxlc1F1ZXJ5IiwgImdldFRhYmxlc1F1ZXJ5IiwgInRhYmxlc0Vycm9yIiwgInRhYmxlcyIsICJjcmVhdGVJbnRyb3NwZWN0aW9uIiwgImdldFNlbGVjdFF1ZXJ5IiwgInJlc3VsdHMiLCAiZ2V0VXBkYXRlUXVlcnkiLCAicm93IiwgImFyZ3MiLCAic2NoZW1hcyIsICJ0YWJsZSIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJfc3FsIiwgImNvbHVtbnNSZWNvcmQiLCAiY29sdW1uIiwgImRhdGF0eXBlIiwgImZrX2NvbHVtbiIsICJjb2x1bW5OYW1lIiwgImFmZmluaXR5IiwgImRldGVybWluZUNvbHVtbkFmZmluaXR5IiwgIlNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQSIsICJtb2NrSW50cm9zcGVjdCIsICJtb2NrVGFibGVzUXVlcnkiXQp9Cg==