@prisma/studio-core 0.1.0 → 0.2.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.
Files changed (45) hide show
  1. package/dist/chunk-BUOKRYKO.js +10 -0
  2. package/dist/chunk-FRW62KTF.js +10 -0
  3. package/dist/chunk-P5LRZ6C2.js +10 -0
  4. package/dist/chunk-T2BEVNT5.js +10 -0
  5. package/dist/data/accelerate/index.cjs +2 -1
  6. package/dist/data/accelerate/index.d.cts +10 -2
  7. package/dist/data/accelerate/index.d.ts +10 -2
  8. package/dist/data/accelerate/index.js +10 -1
  9. package/dist/data/bff/index.cjs +2 -1
  10. package/dist/data/bff/index.d.cts +10 -3
  11. package/dist/data/bff/index.d.ts +10 -3
  12. package/dist/data/bff/index.js +10 -1
  13. package/dist/data/index.cjs +2 -1
  14. package/dist/data/index.d.cts +11 -2
  15. package/dist/data/index.d.ts +11 -2
  16. package/dist/data/index.js +10 -1
  17. package/dist/data/pglite/index.cjs +2 -1
  18. package/dist/data/pglite/index.d.cts +22 -5
  19. package/dist/data/pglite/index.d.ts +22 -5
  20. package/dist/data/pglite/index.js +10 -1
  21. package/dist/data/postgres-core/index.cjs +2 -1
  22. package/dist/data/postgres-core/index.d.cts +103 -18
  23. package/dist/data/postgres-core/index.d.ts +103 -18
  24. package/dist/data/postgres-core/index.js +10 -1
  25. package/dist/metafile-cjs.json +1 -0
  26. package/dist/metafile-esm.json +1 -0
  27. package/dist/query-Q-ZKX_Vr.d.cts +288 -0
  28. package/dist/query-Q-ZKX_Vr.d.ts +288 -0
  29. package/dist/ui/index.cjs +263 -1367
  30. package/dist/ui/index.css +1327 -680
  31. package/dist/ui/index.d.cts +69 -3
  32. package/dist/ui/index.d.ts +69 -3
  33. package/dist/ui/index.js +274 -41
  34. package/package.json +38 -31
  35. package/dist/CPIOZS5X-NALOZFPD.js +0 -1
  36. package/dist/OKF6E45R-6KC3BLVB.js +0 -1
  37. package/dist/adapter-Co8KY8Hi.d.cts +0 -166
  38. package/dist/adapter-Co8KY8Hi.d.ts +0 -166
  39. package/dist/chunk-2FW6TKD6.js +0 -1
  40. package/dist/chunk-5MNS4IJC.js +0 -1332
  41. package/dist/chunk-N2MLAUEV.js +0 -1
  42. package/dist/chunk-RGBMDID6.js +0 -1
  43. package/dist/chunk-ZCFLMQMM.js +0 -1
  44. package/dist/index-CnVNNyod.d.cts +0 -35
  45. package/dist/index-M4EjPWNJ.d.ts +0 -35
@@ -0,0 +1,10 @@
1
+ import * as ___react___ from 'react';
2
+ import * as ___react_dom___ from 'react-dom';
3
+
4
+ function require(mod) {
5
+ if (mod === 'react') return ___react___;
6
+ if (mod === 'react-dom') return ___react_dom___;
7
+ throw new Error(`Unknown module ${mod}`);
8
+ }
9
+ var g=Object.create;var e=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var p=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(b,c)=>(typeof require<"u"?require:b)[c]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});var l=(a,b)=>()=>(a&&(b=a(a=0)),b);var q=(a,b)=>()=>(b||a((b={exports:{}}).exports,b),b.exports),r=(a,b)=>{for(var c in b)e(a,c,{get:b[c],enumerable:!0})},m=(a,b,c,f)=>{if(b&&typeof b=="object"||typeof b=="function")for(let d of i(b))!k.call(a,d)&&d!==c&&e(a,d,{get:()=>b[d],enumerable:!(f=h(b,d))||f.enumerable});return a};var s=(a,b,c)=>(c=a!=null?g(j(a)):{},m(b||!a||!a.__esModule?e(c,"default",{value:a,enumerable:!0}):c,a));var v,o=l(()=>{v={postgres:{encoded:"ZGF0YXNvdXJjZSBkYiB7CiAgICBwcm92aWRlciA9ICJwb3N0Z3JlcyIKICAgIHVybCAgICAgID0gZW52KCJEQVRBQkFTRV9VUkwiKQp9CiAgICAKZ2VuZXJhdG9yIGNsaWVudCB7CiAgICBwcm92aWRlciA9ICJwcmlzbWEtY2xpZW50LWpzIgp9",hash:"54195896aeafa3318ca33f5a8bb44c6b4d89c368cb15288f3bd5ace35a3f9227"}}});export{p as a,q as b,r as c,s as d,o as e,v as f};
10
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPGRlZmluZTpBQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUj4iXSwKICAic291cmNlc0NvbnRlbnQiOiBbIiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7OzIxQkFBQSxJQUFBQSxFQUFBQyxFQUFBQyxFQUFBLEtBQUFGLEVBQUEsQ0FBQyxTQUFXLENBQUMsUUFBVSwyTEFBMkwsS0FBTyxrRUFBa0UsQ0FBQyIsCiAgIm5hbWVzIjogWyJkZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVJfZGVmYXVsdCIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJfX2VzbU1pbiJdCn0K
@@ -0,0 +1,10 @@
1
+ import * as ___react___ from 'react';
2
+ import * as ___react_dom___ from 'react-dom';
3
+
4
+ function require(mod) {
5
+ if (mod === 'react') return ___react___;
6
+ if (mod === 'react-dom') return ___react_dom___;
7
+ throw new Error(`Unknown module ${mod}`);
8
+ }
9
+ import{A as nt,B as b,C as F,a as B,b as V,c as q,d as W,e as J,f as K,g as f,h as A,i as G,j as $,k as C,l as Y,m as g,n as H,o as X,p as Z,q as P,r as tt,s as it,t as k,u as O,v,w as et,x as st,y as rt,z as at}from"./chunk-FRW62KTF.js";import{e as n}from"./chunk-P5LRZ6C2.js";n();n();n();function m(s){let{error:t,query:i}=s,e=t;return e.query=i,[e]}n();var pt={bool:{group:"boolean"},boolean:{group:"boolean"},bytea:{group:"string"},char:{group:"string"},citext:{group:"string"},date:{group:"datetime"},interval:{group:"string"},name:{group:"string"},varchar:{group:"string"},text:{group:"string"},time:{group:"time"},timestamp:{group:"datetime"},timestamptz:{group:"datetime"},"timestamp without time zone":{group:"datetime"},"timestamp with time zone":{group:"datetime"},timetz:{group:"time"},"time without time zone":{group:"time"},"time with time zone":{group:"datetime"},uuid:{group:"string"},int2:{group:"numeric"},int4:{group:"numeric"},int8:{group:"numeric"},smallint:{group:"numeric"},integer:{group:"numeric"},bigint:{group:"numeric"},decimal:{group:"numeric"},numeric:{group:"numeric"},real:{group:"numeric"},float4:{group:"numeric"},float8:{group:"numeric"},"double precision":{group:"numeric"},json:{group:"json"},jsonb:{group:"json"}};n();n();var M=class s{#t;constructor(t){this.#t=f(t)}get expressionType(){}get isRawBuilder(){return!0}as(t){return new z(this,t)}$castTo(){return new s({...this.#t})}$notNull(){return new s(this.#t)}withPlugin(t){return new s({...this.#t,plugins:this.#t.plugins!==void 0?f([...this.#t.plugins,t]):f([t])})}toOperationNode(){return this.#e(this.#i())}compile(t){return this.#s(this.#i(t))}async execute(t){let i=this.#i(t);return i.executeQuery(this.#s(i),this.#t.queryId)}#i(t){let i=t!==void 0?t.getExecutor():et;return this.#t.plugins!==void 0?i.withPlugins(this.#t.plugins):i}#e(t){return t.transformQuery(this.#t.rawNode,this.#t.queryId)}#s(t){return t.compileQuery(this.#e(t),this.#t.queryId)}};function N(s){return new M(s)}var z=class{#t;#i;constructor(t,i){this.#t=t,this.#i=i}get expression(){return this.#t}get alias(){return this.#i}get rawBuilder(){return this.#t}toOperationNode(){return $.create(this.#t.toOperationNode(),C(this.#i)?this.#i.toOperationNode():A.create(this.#i))}};n();var h=Object.assign((s,...t)=>N({queryId:v(),rawNode:g.create(s,t?.map(ot)??[])}),{ref(s){return N({queryId:v(),rawNode:g.createWithChild(X(s))})},val(s){return N({queryId:v(),rawNode:g.createWithChild(P(s))})},value(s){return this.val(s)},table(s){return N({queryId:v(),rawNode:g.createWithChild(rt(s))})},id(...s){let t=new Array(s.length+1).fill(".");return t[0]="",t[t.length-1]="",N({queryId:v(),rawNode:g.create(t,s.map(A.create))})},lit(s){return N({queryId:v(),rawNode:g.createWithChild(Z.createImmediate(s))})},literal(s){return this.lit(s)},raw(s){return N({queryId:v(),rawNode:g.createWithSql(s)})},join(s,t=h`, `){let i=new Array(Math.max(2*s.length-1,0)),e=t.toOperationNode();for(let r=0;r<s.length;++r)i[2*r]=ot(s[r]),r!==s.length-1&&(i[2*r+1]=e);return N({queryId:v(),rawNode:g.createWithChildren(i)})}});function ot(s){return C(s)?s.toOperationNode():P(s)}n();n();var S=class{nodeStack=[];get parentNode(){return this.nodeStack[this.nodeStack.length-2]}#t=f({AliasNode:this.visitAlias.bind(this),ColumnNode:this.visitColumn.bind(this),IdentifierNode:this.visitIdentifier.bind(this),SchemableIdentifierNode:this.visitSchemableIdentifier.bind(this),RawNode:this.visitRaw.bind(this),ReferenceNode:this.visitReference.bind(this),SelectQueryNode:this.visitSelectQuery.bind(this),SelectionNode:this.visitSelection.bind(this),TableNode:this.visitTable.bind(this),FromNode:this.visitFrom.bind(this),SelectAllNode:this.visitSelectAll.bind(this),AndNode:this.visitAnd.bind(this),OrNode:this.visitOr.bind(this),ValueNode:this.visitValue.bind(this),ValueListNode:this.visitValueList.bind(this),PrimitiveValueListNode:this.visitPrimitiveValueList.bind(this),ParensNode:this.visitParens.bind(this),JoinNode:this.visitJoin.bind(this),OperatorNode:this.visitOperator.bind(this),WhereNode:this.visitWhere.bind(this),InsertQueryNode:this.visitInsertQuery.bind(this),DeleteQueryNode:this.visitDeleteQuery.bind(this),ReturningNode:this.visitReturning.bind(this),CreateTableNode:this.visitCreateTable.bind(this),AddColumnNode:this.visitAddColumn.bind(this),ColumnDefinitionNode:this.visitColumnDefinition.bind(this),DropTableNode:this.visitDropTable.bind(this),DataTypeNode:this.visitDataType.bind(this),OrderByNode:this.visitOrderBy.bind(this),OrderByItemNode:this.visitOrderByItem.bind(this),GroupByNode:this.visitGroupBy.bind(this),GroupByItemNode:this.visitGroupByItem.bind(this),UpdateQueryNode:this.visitUpdateQuery.bind(this),ColumnUpdateNode:this.visitColumnUpdate.bind(this),LimitNode:this.visitLimit.bind(this),OffsetNode:this.visitOffset.bind(this),OnConflictNode:this.visitOnConflict.bind(this),OnDuplicateKeyNode:this.visitOnDuplicateKey.bind(this),CreateIndexNode:this.visitCreateIndex.bind(this),DropIndexNode:this.visitDropIndex.bind(this),ListNode:this.visitList.bind(this),PrimaryKeyConstraintNode:this.visitPrimaryKeyConstraint.bind(this),UniqueConstraintNode:this.visitUniqueConstraint.bind(this),ReferencesNode:this.visitReferences.bind(this),CheckConstraintNode:this.visitCheckConstraint.bind(this),WithNode:this.visitWith.bind(this),CommonTableExpressionNode:this.visitCommonTableExpression.bind(this),CommonTableExpressionNameNode:this.visitCommonTableExpressionName.bind(this),HavingNode:this.visitHaving.bind(this),CreateSchemaNode:this.visitCreateSchema.bind(this),DropSchemaNode:this.visitDropSchema.bind(this),AlterTableNode:this.visitAlterTable.bind(this),DropColumnNode:this.visitDropColumn.bind(this),RenameColumnNode:this.visitRenameColumn.bind(this),AlterColumnNode:this.visitAlterColumn.bind(this),ModifyColumnNode:this.visitModifyColumn.bind(this),AddConstraintNode:this.visitAddConstraint.bind(this),DropConstraintNode:this.visitDropConstraint.bind(this),RenameConstraintNode:this.visitRenameConstraint.bind(this),ForeignKeyConstraintNode:this.visitForeignKeyConstraint.bind(this),CreateViewNode:this.visitCreateView.bind(this),RefreshMaterializedViewNode:this.visitRefreshMaterializedView.bind(this),DropViewNode:this.visitDropView.bind(this),GeneratedNode:this.visitGenerated.bind(this),DefaultValueNode:this.visitDefaultValue.bind(this),OnNode:this.visitOn.bind(this),ValuesNode:this.visitValues.bind(this),SelectModifierNode:this.visitSelectModifier.bind(this),CreateTypeNode:this.visitCreateType.bind(this),DropTypeNode:this.visitDropType.bind(this),ExplainNode:this.visitExplain.bind(this),DefaultInsertValueNode:this.visitDefaultInsertValue.bind(this),AggregateFunctionNode:this.visitAggregateFunction.bind(this),OverNode:this.visitOver.bind(this),PartitionByNode:this.visitPartitionBy.bind(this),PartitionByItemNode:this.visitPartitionByItem.bind(this),SetOperationNode:this.visitSetOperation.bind(this),BinaryOperationNode:this.visitBinaryOperation.bind(this),UnaryOperationNode:this.visitUnaryOperation.bind(this),UsingNode:this.visitUsing.bind(this),FunctionNode:this.visitFunction.bind(this),CaseNode:this.visitCase.bind(this),WhenNode:this.visitWhen.bind(this),JSONReferenceNode:this.visitJSONReference.bind(this),JSONPathNode:this.visitJSONPath.bind(this),JSONPathLegNode:this.visitJSONPathLeg.bind(this),JSONOperatorChainNode:this.visitJSONOperatorChain.bind(this),TupleNode:this.visitTuple.bind(this),MergeQueryNode:this.visitMergeQuery.bind(this),MatchedNode:this.visitMatched.bind(this),AddIndexNode:this.visitAddIndex.bind(this),CastNode:this.visitCast.bind(this),FetchNode:this.visitFetch.bind(this),TopNode:this.visitTop.bind(this),OutputNode:this.visitOutput.bind(this),OrActionNode:this.visitOrAction.bind(this),CollateNode:this.visitCollate.bind(this)});visitNode=t=>{this.nodeStack.push(t),this.#t[t.kind](t),this.nodeStack.pop()}};var _t=/'/g,D=class extends S{#t="";#i=[];get numParameters(){return this.#i.length}compileQuery(t,i){return this.#t="",this.#i=[],this.nodeStack.splice(0,this.nodeStack.length),this.visitNode(t),f({query:t,queryId:i,sql:this.getSql(),parameters:[...this.#i]})}getSql(){return this.#t}visitSelectQuery(t){let i=this.parentNode!==void 0&&!tt.is(this.parentNode)&&!it.is(this.parentNode)&&!G.is(this.parentNode)&&!at.is(this.parentNode)&&!st.is(this.parentNode);this.parentNode===void 0&&t.explain&&(this.visitNode(t.explain),this.append(" ")),i&&this.append("("),t.with&&(this.visitNode(t.with),this.append(" ")),this.append("select"),t.distinctOn&&(this.append(" "),this.compileDistinctOn(t.distinctOn)),t.frontModifiers?.length&&(this.append(" "),this.compileList(t.frontModifiers," ")),t.top&&(this.append(" "),this.visitNode(t.top)),t.selections&&(this.append(" "),this.compileList(t.selections)),t.from&&(this.append(" "),this.visitNode(t.from)),t.joins&&(this.append(" "),this.compileList(t.joins," ")),t.where&&(this.append(" "),this.visitNode(t.where)),t.groupBy&&(this.append(" "),this.visitNode(t.groupBy)),t.having&&(this.append(" "),this.visitNode(t.having)),t.setOperations&&(this.append(" "),this.compileList(t.setOperations," ")),t.orderBy&&(this.append(" "),this.visitNode(t.orderBy)),t.limit&&(this.append(" "),this.visitNode(t.limit)),t.offset&&(this.append(" "),this.visitNode(t.offset)),t.fetch&&(this.append(" "),this.visitNode(t.fetch)),t.endModifiers?.length&&(this.append(" "),this.compileList(this.sortSelectModifiers([...t.endModifiers])," ")),i&&this.append(")")}visitFrom(t){this.append("from "),this.compileList(t.froms)}visitSelection(t){this.visitNode(t.selection)}visitColumn(t){this.visitNode(t.column)}compileDistinctOn(t){this.append("distinct on ("),this.compileList(t),this.append(")")}compileList(t,i=", "){let e=t.length-1;for(let r=0;r<=e;r++)this.visitNode(t[r]),r<e&&this.append(i)}visitWhere(t){this.append("where "),this.visitNode(t.where)}visitHaving(t){this.append("having "),this.visitNode(t.having)}visitInsertQuery(t){let i=this.nodeStack.find(O.is),e=i!==t;!e&&t.explain&&(this.visitNode(t.explain),this.append(" ")),e&&!k.is(i)&&this.append("("),t.with&&(this.visitNode(t.with),this.append(" ")),this.append(t.replace?"replace":"insert"),t.ignore&&(H("`InsertQueryNode.ignore` is deprecated. Use `InsertQueryNode.orAction` instead."),this.append(" ignore")),t.orAction&&(this.append(" "),this.visitNode(t.orAction)),t.top&&(this.append(" "),this.visitNode(t.top)),t.into&&(this.append(" into "),this.visitNode(t.into)),t.columns&&(this.append(" ("),this.compileList(t.columns),this.append(")")),t.output&&(this.append(" "),this.visitNode(t.output)),t.values&&(this.append(" "),this.visitNode(t.values)),t.defaultValues&&(this.append(" "),this.append("default values")),t.onConflict&&(this.append(" "),this.visitNode(t.onConflict)),t.onDuplicateKey&&(this.append(" "),this.visitNode(t.onDuplicateKey)),t.returning&&(this.append(" "),this.visitNode(t.returning)),e&&!k.is(i)&&this.append(")"),t.endModifiers?.length&&(this.append(" "),this.compileList(t.endModifiers," "))}visitValues(t){this.append("values "),this.compileList(t.values)}visitDeleteQuery(t){let i=this.nodeStack.find(O.is)!==t;!i&&t.explain&&(this.visitNode(t.explain),this.append(" ")),i&&this.append("("),t.with&&(this.visitNode(t.with),this.append(" ")),this.append("delete "),t.top&&(this.visitNode(t.top),this.append(" ")),this.visitNode(t.from),t.output&&(this.append(" "),this.visitNode(t.output)),t.using&&(this.append(" "),this.visitNode(t.using)),t.joins&&(this.append(" "),this.compileList(t.joins," ")),t.where&&(this.append(" "),this.visitNode(t.where)),t.orderBy&&(this.append(" "),this.visitNode(t.orderBy)),t.limit&&(this.append(" "),this.visitNode(t.limit)),t.returning&&(this.append(" "),this.visitNode(t.returning)),i&&this.append(")"),t.endModifiers?.length&&(this.append(" "),this.compileList(t.endModifiers," "))}visitReturning(t){this.append("returning "),this.compileList(t.selections)}visitAlias(t){this.visitNode(t.node),this.append(" as "),this.visitNode(t.alias)}visitReference(t){t.table&&(this.visitNode(t.table),this.append(".")),this.visitNode(t.column)}visitSelectAll(t){this.append("*")}visitIdentifier(t){this.append(this.getLeftIdentifierWrapper()),this.compileUnwrappedIdentifier(t),this.append(this.getRightIdentifierWrapper())}compileUnwrappedIdentifier(t){if(!B(t.name))throw new Error("a non-string identifier was passed to compileUnwrappedIdentifier.");this.append(this.sanitizeIdentifier(t.name))}visitAnd(t){this.visitNode(t.left),this.append(" and "),this.visitNode(t.right)}visitOr(t){this.visitNode(t.left),this.append(" or "),this.visitNode(t.right)}visitValue(t){t.immediate?this.appendImmediateValue(t.value):this.appendValue(t.value)}visitValueList(t){this.append("("),this.compileList(t.values),this.append(")")}visitTuple(t){this.append("("),this.compileList(t.values),this.append(")")}visitPrimitiveValueList(t){this.append("(");let{values:i}=t;for(let e=0;e<i.length;++e)this.appendValue(i[e]),e!==i.length-1&&this.append(", ");this.append(")")}visitParens(t){this.append("("),this.visitNode(t.node),this.append(")")}visitJoin(t){this.append(kt[t.joinType]),this.append(" "),this.visitNode(t.table),t.on&&(this.append(" "),this.visitNode(t.on))}visitOn(t){this.append("on "),this.visitNode(t.on)}visitRaw(t){let{sqlFragments:i,parameters:e}=t;for(let r=0;r<i.length;++r)this.append(i[r]),e.length>r&&this.visitNode(e[r])}visitOperator(t){this.append(t.operator)}visitTable(t){this.visitNode(t.table)}visitSchemableIdentifier(t){t.schema&&(this.visitNode(t.schema),this.append(".")),this.visitNode(t.identifier)}visitCreateTable(t){this.append("create "),t.frontModifiers&&t.frontModifiers.length>0&&(this.compileList(t.frontModifiers," "),this.append(" ")),t.temporary&&this.append("temporary "),this.append("table "),t.ifNotExists&&this.append("if not exists "),this.visitNode(t.table),t.selectQuery?(this.append(" as "),this.visitNode(t.selectQuery)):(this.append(" ("),this.compileList([...t.columns,...t.constraints??[]]),this.append(")"),t.onCommit&&(this.append(" on commit "),this.append(t.onCommit)),t.endModifiers&&t.endModifiers.length>0&&(this.append(" "),this.compileList(t.endModifiers," ")))}visitColumnDefinition(t){t.ifNotExists&&this.append("if not exists "),this.visitNode(t.column),this.append(" "),this.visitNode(t.dataType),t.unsigned&&this.append(" unsigned"),t.frontModifiers&&t.frontModifiers.length>0&&(this.append(" "),this.compileList(t.frontModifiers," ")),t.generated&&(this.append(" "),this.visitNode(t.generated)),t.identity&&this.append(" identity"),t.defaultTo&&(this.append(" "),this.visitNode(t.defaultTo)),t.notNull&&this.append(" not null"),t.unique&&this.append(" unique"),t.nullsNotDistinct&&this.append(" nulls not distinct"),t.primaryKey&&this.append(" primary key"),t.autoIncrement&&(this.append(" "),this.append(this.getAutoIncrement())),t.references&&(this.append(" "),this.visitNode(t.references)),t.check&&(this.append(" "),this.visitNode(t.check)),t.endModifiers&&t.endModifiers.length>0&&(this.append(" "),this.compileList(t.endModifiers," "))}getAutoIncrement(){return"auto_increment"}visitReferences(t){this.append("references "),this.visitNode(t.table),this.append(" ("),this.compileList(t.columns),this.append(")"),t.onDelete&&(this.append(" on delete "),this.append(t.onDelete)),t.onUpdate&&(this.append(" on update "),this.append(t.onUpdate))}visitDropTable(t){this.append("drop table "),t.ifExists&&this.append("if exists "),this.visitNode(t.table),t.cascade&&this.append(" cascade")}visitDataType(t){this.append(t.dataType)}visitOrderBy(t){this.append("order by "),this.compileList(t.items)}visitOrderByItem(t){this.visitNode(t.orderBy),t.collation&&(this.append(" "),this.visitNode(t.collation)),t.direction&&(this.append(" "),this.visitNode(t.direction)),t.nulls&&(this.append(" nulls "),this.append(t.nulls))}visitGroupBy(t){this.append("group by "),this.compileList(t.items)}visitGroupByItem(t){this.visitNode(t.groupBy)}visitUpdateQuery(t){let i=this.nodeStack.find(O.is),e=i!==t;if(!e&&t.explain&&(this.visitNode(t.explain),this.append(" ")),e&&!k.is(i)&&this.append("("),t.with&&(this.visitNode(t.with),this.append(" ")),this.append("update "),t.top&&(this.visitNode(t.top),this.append(" ")),t.table&&(this.visitNode(t.table),this.append(" ")),this.append("set "),t.updates&&this.compileList(t.updates),t.output&&(this.append(" "),this.visitNode(t.output)),t.from&&(this.append(" "),this.visitNode(t.from)),t.joins){if(!t.from)throw new Error("Joins in an update query are only supported as a part of a PostgreSQL 'update set from join' query. If you want to create a MySQL 'update join set' query, see https://kysely.dev/docs/examples/update/my-sql-joins");this.append(" "),this.compileList(t.joins," ")}t.where&&(this.append(" "),this.visitNode(t.where)),t.orderBy&&(this.append(" "),this.visitNode(t.orderBy)),t.limit&&(this.append(" "),this.visitNode(t.limit)),t.returning&&(this.append(" "),this.visitNode(t.returning)),e&&!k.is(i)&&this.append(")"),t.endModifiers?.length&&(this.append(" "),this.compileList(t.endModifiers," "))}visitColumnUpdate(t){this.visitNode(t.column),this.append(" = "),this.visitNode(t.value)}visitLimit(t){this.append("limit "),this.visitNode(t.limit)}visitOffset(t){this.append("offset "),this.visitNode(t.offset)}visitOnConflict(t){this.append("on conflict"),t.columns?(this.append(" ("),this.compileList(t.columns),this.append(")")):t.constraint?(this.append(" on constraint "),this.visitNode(t.constraint)):t.indexExpression&&(this.append(" ("),this.visitNode(t.indexExpression),this.append(")")),t.indexWhere&&(this.append(" "),this.visitNode(t.indexWhere)),t.doNothing===!0?this.append(" do nothing"):t.updates&&(this.append(" do update set "),this.compileList(t.updates),t.updateWhere&&(this.append(" "),this.visitNode(t.updateWhere)))}visitOnDuplicateKey(t){this.append("on duplicate key update "),this.compileList(t.updates)}visitCreateIndex(t){this.append("create "),t.unique&&this.append("unique "),this.append("index "),t.ifNotExists&&this.append("if not exists "),this.visitNode(t.name),t.table&&(this.append(" on "),this.visitNode(t.table)),t.using&&(this.append(" using "),this.visitNode(t.using)),t.columns&&(this.append(" ("),this.compileList(t.columns),this.append(")")),t.nullsNotDistinct&&this.append(" nulls not distinct"),t.where&&(this.append(" "),this.visitNode(t.where))}visitDropIndex(t){this.append("drop index "),t.ifExists&&this.append("if exists "),this.visitNode(t.name),t.table&&(this.append(" on "),this.visitNode(t.table)),t.cascade&&this.append(" cascade")}visitCreateSchema(t){this.append("create schema "),t.ifNotExists&&this.append("if not exists "),this.visitNode(t.schema)}visitDropSchema(t){this.append("drop schema "),t.ifExists&&this.append("if exists "),this.visitNode(t.schema),t.cascade&&this.append(" cascade")}visitPrimaryKeyConstraint(t){t.name&&(this.append("constraint "),this.visitNode(t.name),this.append(" ")),this.append("primary key ("),this.compileList(t.columns),this.append(")"),this.buildDeferrable(t)}buildDeferrable(t){t.deferrable!==void 0&&(t.deferrable?this.append(" deferrable"):this.append(" not deferrable")),t.initiallyDeferred!==void 0&&(t.initiallyDeferred?this.append(" initially deferred"):this.append(" initially immediate"))}visitUniqueConstraint(t){t.name&&(this.append("constraint "),this.visitNode(t.name),this.append(" ")),this.append("unique"),t.nullsNotDistinct&&this.append(" nulls not distinct"),this.append(" ("),this.compileList(t.columns),this.append(")"),this.buildDeferrable(t)}visitCheckConstraint(t){t.name&&(this.append("constraint "),this.visitNode(t.name),this.append(" ")),this.append("check ("),this.visitNode(t.expression),this.append(")")}visitForeignKeyConstraint(t){t.name&&(this.append("constraint "),this.visitNode(t.name),this.append(" ")),this.append("foreign key ("),this.compileList(t.columns),this.append(") "),this.visitNode(t.references),t.onDelete&&(this.append(" on delete "),this.append(t.onDelete)),t.onUpdate&&(this.append(" on update "),this.append(t.onUpdate)),this.buildDeferrable(t)}visitList(t){this.compileList(t.items)}visitWith(t){this.append("with "),t.recursive&&this.append("recursive "),this.compileList(t.expressions)}visitCommonTableExpression(t){this.visitNode(t.name),this.append(" as "),q(t.materialized)&&(t.materialized||this.append("not "),this.append("materialized ")),this.visitNode(t.expression)}visitCommonTableExpressionName(t){this.visitNode(t.table),t.columns&&(this.append("("),this.compileList(t.columns),this.append(")"))}visitAlterTable(t){this.append("alter table "),this.visitNode(t.table),this.append(" "),t.renameTo&&(this.append("rename to "),this.visitNode(t.renameTo)),t.setSchema&&(this.append("set schema "),this.visitNode(t.setSchema)),t.addConstraint&&this.visitNode(t.addConstraint),t.dropConstraint&&this.visitNode(t.dropConstraint),t.renameConstraint&&this.visitNode(t.renameConstraint),t.columnAlterations&&this.compileColumnAlterations(t.columnAlterations),t.addIndex&&this.visitNode(t.addIndex),t.dropIndex&&this.visitNode(t.dropIndex)}visitAddColumn(t){this.append("add column "),this.visitNode(t.column)}visitRenameColumn(t){this.append("rename column "),this.visitNode(t.column),this.append(" to "),this.visitNode(t.renameTo)}visitDropColumn(t){this.append("drop column "),this.visitNode(t.column)}visitAlterColumn(t){this.append("alter column "),this.visitNode(t.column),this.append(" "),t.dataType&&(this.announcesNewColumnDataType()&&this.append("type "),this.visitNode(t.dataType),t.dataTypeExpression&&(this.append("using "),this.visitNode(t.dataTypeExpression))),t.setDefault&&(this.append("set default "),this.visitNode(t.setDefault)),t.dropDefault&&this.append("drop default"),t.setNotNull&&this.append("set not null"),t.dropNotNull&&this.append("drop not null")}visitModifyColumn(t){this.append("modify column "),this.visitNode(t.column)}visitAddConstraint(t){this.append("add "),this.visitNode(t.constraint)}visitDropConstraint(t){this.append("drop constraint "),t.ifExists&&this.append("if exists "),this.visitNode(t.constraintName),t.modifier==="cascade"?this.append(" cascade"):t.modifier==="restrict"&&this.append(" restrict")}visitRenameConstraint(t){this.append("rename constraint "),this.visitNode(t.oldName),this.append(" to "),this.visitNode(t.newName)}visitSetOperation(t){this.append(t.operator),this.append(" "),t.all&&this.append("all "),this.visitNode(t.expression)}visitCreateView(t){this.append("create "),t.orReplace&&this.append("or replace "),t.materialized&&this.append("materialized "),t.temporary&&this.append("temporary "),this.append("view "),t.ifNotExists&&this.append("if not exists "),this.visitNode(t.name),this.append(" "),t.columns&&(this.append("("),this.compileList(t.columns),this.append(") ")),t.as&&(this.append("as "),this.visitNode(t.as))}visitRefreshMaterializedView(t){this.append("refresh materialized view "),t.concurrently&&this.append("concurrently "),this.visitNode(t.name),t.withNoData?this.append(" with no data"):this.append(" with data")}visitDropView(t){this.append("drop "),t.materialized&&this.append("materialized "),this.append("view "),t.ifExists&&this.append("if exists "),this.visitNode(t.name),t.cascade&&this.append(" cascade")}visitGenerated(t){this.append("generated "),t.always&&this.append("always "),t.byDefault&&this.append("by default "),this.append("as "),t.identity&&this.append("identity"),t.expression&&(this.append("("),this.visitNode(t.expression),this.append(")")),t.stored&&this.append(" stored")}visitDefaultValue(t){this.append("default "),this.visitNode(t.defaultValue)}visitSelectModifier(t){t.rawModifier?this.visitNode(t.rawModifier):this.append(wt[t.modifier]),t.of&&(this.append(" of "),this.compileList(t.of,", "))}visitCreateType(t){this.append("create type "),this.visitNode(t.name),t.enum&&(this.append(" as enum "),this.visitNode(t.enum))}visitDropType(t){this.append("drop type "),t.ifExists&&this.append("if exists "),this.visitNode(t.name)}visitExplain(t){this.append("explain"),(t.options||t.format)&&(this.append(" "),this.append(this.getLeftExplainOptionsWrapper()),t.options&&(this.visitNode(t.options),t.format&&this.append(this.getExplainOptionsDelimiter())),t.format&&(this.append("format"),this.append(this.getExplainOptionAssignment()),this.append(t.format)),this.append(this.getRightExplainOptionsWrapper()))}visitDefaultInsertValue(t){this.append("default")}visitAggregateFunction(t){this.append(t.func),this.append("("),t.distinct&&this.append("distinct "),this.compileList(t.aggregated),t.orderBy&&(this.append(" "),this.visitNode(t.orderBy)),this.append(")"),t.withinGroup&&(this.append(" within group ("),this.visitNode(t.withinGroup),this.append(")")),t.filter&&(this.append(" filter("),this.visitNode(t.filter),this.append(")")),t.over&&(this.append(" "),this.visitNode(t.over))}visitOver(t){this.append("over("),t.partitionBy&&(this.visitNode(t.partitionBy),t.orderBy&&this.append(" ")),t.orderBy&&this.visitNode(t.orderBy),this.append(")")}visitPartitionBy(t){this.append("partition by "),this.compileList(t.items)}visitPartitionByItem(t){this.visitNode(t.partitionBy)}visitBinaryOperation(t){this.visitNode(t.leftOperand),this.append(" "),this.visitNode(t.operator),this.append(" "),this.visitNode(t.rightOperand)}visitUnaryOperation(t){this.visitNode(t.operator),this.isMinusOperator(t.operator)||this.append(" "),this.visitNode(t.operand)}isMinusOperator(t){return Y.is(t)&&t.operator==="-"}visitUsing(t){this.append("using "),this.compileList(t.tables)}visitFunction(t){this.append(t.func),this.append("("),this.compileList(t.arguments),this.append(")")}visitCase(t){this.append("case"),t.value&&(this.append(" "),this.visitNode(t.value)),t.when&&(this.append(" "),this.compileList(t.when," ")),t.else&&(this.append(" else "),this.visitNode(t.else)),this.append(" end"),t.isStatement&&this.append(" case")}visitWhen(t){this.append("when "),this.visitNode(t.condition),t.result&&(this.append(" then "),this.visitNode(t.result))}visitJSONReference(t){this.visitNode(t.reference),this.visitNode(t.traversal)}visitJSONPath(t){t.inOperator&&this.visitNode(t.inOperator),this.append("'$");for(let i of t.pathLegs)this.visitNode(i);this.append("'")}visitJSONPathLeg(t){let i=t.type==="ArrayLocation";this.append(i?"[":"."),this.append(String(t.value)),i&&this.append("]")}visitJSONOperatorChain(t){for(let i=0,e=t.values.length;i<e;i++)i===e-1?this.visitNode(t.operator):this.append("->"),this.visitNode(t.values[i])}visitMergeQuery(t){t.with&&(this.visitNode(t.with),this.append(" ")),this.append("merge "),t.top&&(this.visitNode(t.top),this.append(" ")),this.append("into "),this.visitNode(t.into),t.using&&(this.append(" "),this.visitNode(t.using)),t.whens&&(this.append(" "),this.compileList(t.whens," ")),t.returning&&(this.append(" "),this.visitNode(t.returning)),t.output&&(this.append(" "),this.visitNode(t.output)),t.endModifiers?.length&&(this.append(" "),this.compileList(t.endModifiers," "))}visitMatched(t){t.not&&this.append("not "),this.append("matched"),t.bySource&&this.append(" by source")}visitAddIndex(t){this.append("add "),t.unique&&this.append("unique "),this.append("index "),this.visitNode(t.name),t.columns&&(this.append(" ("),this.compileList(t.columns),this.append(")")),t.using&&(this.append(" using "),this.visitNode(t.using))}visitCast(t){this.append("cast("),this.visitNode(t.expression),this.append(" as "),this.visitNode(t.dataType),this.append(")")}visitFetch(t){this.append("fetch next "),this.visitNode(t.rowCount),this.append(` rows ${t.modifier}`)}visitOutput(t){this.append("output "),this.compileList(t.selections)}visitTop(t){this.append(`top(${t.expression})`),t.modifiers&&this.append(` ${t.modifiers}`)}visitOrAction(t){this.append(t.action)}visitCollate(t){this.append("collate "),this.visitNode(t.collation)}append(t){this.#t+=t}appendValue(t){this.addParameter(t),this.append(this.getCurrentParameterPlaceholder())}getLeftIdentifierWrapper(){return'"'}getRightIdentifierWrapper(){return'"'}getCurrentParameterPlaceholder(){return"$"+this.numParameters}getLeftExplainOptionsWrapper(){return"("}getExplainOptionAssignment(){return" "}getExplainOptionsDelimiter(){return", "}getRightExplainOptionsWrapper(){return")"}sanitizeIdentifier(t){let i=this.getLeftIdentifierWrapper(),e=this.getRightIdentifierWrapper(),r="";for(let a of t)r+=a,a===i?r+=i:a===e&&(r+=e);return r}sanitizeStringLiteral(t){return t.replace(_t,"''")}addParameter(t){this.#i.push(t)}appendImmediateValue(t){if(B(t))this.appendStringLiteral(t);else if(V(t)||q(t))this.append(t.toString());else if(W(t))this.append("null");else if(J(t))this.appendImmediateValue(t.toISOString());else if(K(t))this.appendImmediateValue(t.toString());else throw new Error(`invalid immediate value ${t}`)}appendStringLiteral(t){this.append("'"),this.append(this.sanitizeStringLiteral(t)),this.append("'")}sortSelectModifiers(t){return t.sort((i,e)=>i.modifier&&e.modifier?lt[i.modifier]-lt[e.modifier]:1),f(t)}compileColumnAlterations(t){this.compileList(t)}announcesNewColumnDataType(){return!0}},wt=f({ForKeyShare:"for key share",ForNoKeyUpdate:"for no key update",ForUpdate:"for update",ForShare:"for share",NoWait:"nowait",SkipLocked:"skip locked",Distinct:"distinct"}),lt=f({ForKeyShare:1,ForNoKeyUpdate:1,ForUpdate:1,ForShare:1,NoWait:2,SkipLocked:2,Distinct:0}),kt=f({InnerJoin:"inner join",LeftJoin:"left join",RightJoin:"right join",FullJoin:"full join",CrossJoin:"cross join",LateralInnerJoin:"inner join lateral",LateralLeftJoin:"left join lateral",LateralCrossJoin:"cross join lateral",OuterApply:"outer apply",CrossApply:"cross apply",Using:"using"});n();var T=class{get supportsCreateIfNotExists(){return!0}get supportsTransactionalDdl(){return!1}get supportsReturning(){return!1}get supportsOutput(){return!1}};n();var At=/"/g,I=class extends D{sanitizeIdentifier(t){return t.replace(At,'""')}};n();var Ct=BigInt("3853314791062309107"),R=class extends T{get supportsTransactionalDdl(){return!0}get supportsReturning(){return!0}async acquireMigrationLock(t,i){await h`select pg_advisory_xact_lock(${h.lit(Ct)})`.execute(t)}async releaseMigrationLock(t,i){}};n();function x(s){return nt({...s,Adapter:R,QueryCompiler:I})}function dt(s,t){let{table:i,rows:e}=s,{name:r,schema:a,columns:p}=i,l=x(t),d=Object.keys(p),o={[d[0]]:h`default`};return b(l.withSchema(a).insertInto(r).values(e.map(y=>Object.keys(y).length===0?o:y)).returning(d).returning(y=>y.cast("ctid","text").as("ctid")))}function ht(s,t){let{pageIndex:i,pageSize:e,sortOrder:r,table:{name:a,schema:p,columns:l},filter:d={kind:"FilterGroup",after:"and",filters:[]}}=s,o=x(t),y=Object.keys(l),E=o.withSchema(p).selectFrom(a).select(u=>u.cast(u.fn.coalesce(u.fn.countAll(),h.lit(0)),"text").as("oid"));return b(o.with("count",()=>E).withSchema(p).selectFrom([a,"count"]).select(h.ref("count.oid").$castTo().as("oid")).select(u=>u.cast("ctid","text").as("ctid")).select(y).$call(u=>r.reduce((_,w)=>_.orderBy(w.column,w.direction),u)).where(ut(d.filters)).limit(e).offset(h.lit(BigInt(i)*BigInt(e))))}function Ot(s){return s.kind==="ColumnFilter"?t=>t(t.ref(s.column),s.operator,s.value):ut(s.filters)}function ut(s){if(s.length===0)return e=>e.lit(!0);let t=[],i=[];for(let e=0;e<s.length;e++)i.push(Ot(s[e])),(e===s.length-1||s[e].after==="or")&&(t.push(i),i=[]);return e=>{let r=t.map(a=>e.and(a.map(p=>p(e))));return e.or(r)}}function Bi(){return[{created_at:new Date("2025-01-26T21:56:12.345Z"),ctid:"(0,1)",deleted_at:null,id:1,name:"John Doe",oid:"2",role:"admin",name_role:"Jonn Doe - admin"},{created_at:new Date("2025-01-26T20:56:12.345Z"),ctid:"(0,2)",deleted_at:null,id:2,name:"Jane Doe",oid:"2",role:"poweruser",name_role:"Jane Doe - poweruser"}]}function ct(s,t){let{changes:i,row:e,table:{columns:r,name:a,schema:p}}=s,l=x(t),d=Object.keys(r);return b(l.withSchema(p).updateTable(a).set(i).$call(F([e],r)).returning(d).returning(o=>[o.cast("ctid","text").as("ctid"),o.cast(o.fn("floor",[o(o.fn("extract",[h`epoch from now()`]),"*",1e6)]),"text").as("__ps_updated_at__")]))}function mt(s,t){let{rows:i,table:{columns:e,name:r,schema:a}}=s,p=x(t);return b(p.withSchema(a).deleteFrom(r).$call(F(i,e)))}n();n();function ft(s){return h`(select coalesce(json_agg(agg), '[]') from ${s} as agg)`}var St="r",Dt="v",Tt=[St,Dt];function yt(s){return b(x(s).selectFrom("pg_catalog.pg_class as cls").innerJoin("pg_catalog.pg_namespace as ns","cls.relnamespace","ns.oid").$call(It).where("cls.relkind","in",Tt).select(t=>["ns.nspname as schema","cls.relname as name",ft(t.selectFrom("pg_catalog.pg_attribute as att").innerJoin("pg_catalog.pg_type as typ","typ.oid","att.atttypid").innerJoin("pg_catalog.pg_namespace as tns","tns.oid","typ.typnamespace").leftJoin("pg_catalog.pg_constraint as pk_con",i=>i.on("pk_con.contype","=","p").onRef("pk_con.conrelid","=","cls.oid").on(e=>e("att.attnum","=",e.fn.any("pk_con.conkey")))).leftJoin("pg_catalog.pg_constraint as fk_con",i=>i.on("fk_con.contype","=","f").onRef("fk_con.conrelid","=","cls.oid").on(e=>e("att.attnum","=",e.fn.any("fk_con.conkey")))).leftJoin("pg_catalog.pg_class as fk_cls","fk_cls.oid","fk_con.confrelid").leftJoin("pg_catalog.pg_namespace as fk_ns","fk_ns.oid","fk_cls.relnamespace").leftJoin("pg_catalog.pg_attribute as fk_att",i=>i.onRef("fk_att.attrelid","=","fk_cls.oid").on(e=>e("fk_att.attnum","=",e.fn.any("fk_con.confkey")))).whereRef("att.attrelid","=","cls.oid").where("att.attnum",">=",0).where("att.attisdropped","!=",!0).select(["att.attname as name","typ.typname as datatype","tns.nspname as datatype_schema","fk_ns.nspname as foreign_key_schema","fk_cls.relname as foreign_key_table","fk_att.attname as foreign_key_column"]).select(i=>[i("pk_con.conkey","is not",null).$castTo().as("pk"),i("att.attgenerated","!=","").$castTo().as("computed"),i("att.attnotnull","!=",!0).$castTo().as("nullable"),i.fn.coalesce(i.selectFrom("pg_catalog.pg_enum as enm").whereRef("enm.enumtypid","=","typ.oid").select(e=>e.fn.jsonAgg(e.ref("enm.enumlabel")).as("o")),h`'[]'`).as("options")])).as("columns")]))}function gt(){return[{schema:"zoo",name:"animals",columns:[{name:"id",datatype:"int4",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"text",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null}]},{schema:"public",name:"users",columns:[{name:"id",datatype:"int4",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"created_at",datatype:"timestamp",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"deleted_at",datatype:"timestamp",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"role",datatype:"varchar",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"varchar",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name_role",datatype:"text",datatype_schema:"pg_catalog",pk:!1,computed:!0,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null}]}]}function vt(){let s=x();return b(s.selectNoFrom(s.fn("current_setting",[h.lit("timezone")]).as("timezone")))}function Nt(){return[{timezone:"UTC"}]}function It(s){return s.where("ns.nspname","!~","^pg_").where("ns.nspname","!=","information_schema")}function Xi(s){let{executor:t,...i}=s;return{defaultSchema:"public",async introspect(e){try{let r=yt(i),a=vt(),[[p,l],[d,o]]=await Promise.all([t.execute(r,e),t.execute(a,e)]);if(p)return m({error:p,query:r});if(d)return m({error:d,query:a});let y=o[0]?.timezone;return y?[null,bt({tables:l,timezone:y,query:r})]:m({error:new Error("Timezone not found"),query:a})}catch(r){return m({error:r})}},async query(e,r){try{let a=ht(e,i),[p,l]=await t.execute(a,r);return p?m({error:p,query:a}):[null,{filteredRowCount:l[0]?.oid||"0",rows:l,query:a}]}catch(a){return m({error:a})}},async insert(e,r){try{let a=dt(e,i),[p,l]=await t.execute(a,r);return p?m({error:p,query:a}):[null,{rows:l,query:a}]}catch(a){return m({error:a})}},async update(e,r){try{let a=ct(e,i),[p,l]=await t.execute(a,r);if(p)return m({error:p,query:a});let[d]=l;return d?[null,{row:d,query:a}]:m({error:new Error("Update failed"),query:a})}catch(a){return m({error:a})}},async delete(e,r){try{let a=mt(e,i),[p]=await t.execute(a,r);return p?m({error:p,query:a}):[null,{...e,query:a}]}catch(a){return m({error:a})}}}}function bt(s){let{tables:t,timezone:i,query:e}=s;return t.reduce((r,a)=>{let{schemas:p}=r,{columns:l,name:d,schema:o}=a,y=l.reduce((E,u)=>{let{datatype:_,datatype_schema:w,name:U,options:j,nullable:xt}=u,L=_.startsWith("_"),Q=L?_.slice(1):_;return{...E,[U]:{datatype:{...pt[Q]||{group:j.length>0?"enum":"raw"},isArray:L,isNative:w==="pg_catalog",name:L?`${Q}[]`:Q,options:j,schema:w},isComputed:u.computed,isInPrimaryKey:u.pk,name:U,nullable:xt,schema:o,table:d,fkSchema:u.foreign_key_schema,fkTable:u.foreign_key_table,fkColumn:u.foreign_key_column}}},{});return p[o]===void 0&&(p[o]={name:o,tables:{}}),p[o].tables[d]={columns:y,name:d,schema:o},r},{schemas:{public:{tables:{},name:"public"}},timezone:i,filterOperators:Rt,query:e})}var Rt=["=","!=",">",">=","<","<=","is","is not","like","not like","ilike","not ilike"];function Zi(){let s=gt(),[{timezone:t}]=Nt();return bt({tables:s,timezone:t,query:{parameters:[],sql:"<mocked>"}})}export{dt as a,ht as b,Bi as c,ct as d,mt as e,yt as f,gt as g,vt as h,Nt as i,Xi as j,Zi as k};
10
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2luZGV4LnRzIiwgIi4uL2RhdGEvcG9zdGdyZXMtY29yZS9hZGFwdGVyLnRzIiwgIi4uL2RhdGEvYWRhcHRlci50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvZGF0YXR5cGUudHMiLCAiLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2RtbC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3Jhdy1idWlsZGVyL3Jhdy1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcmF3LWJ1aWxkZXIvc3FsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktY29tcGlsZXIvZGVmYXVsdC1xdWVyeS1jb21waWxlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXZpc2l0b3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9kaWFsZWN0L2RpYWxlY3QtYWRhcHRlci1iYXNlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vZGlhbGVjdC9wb3N0Z3Jlcy9wb3N0Z3Jlcy1xdWVyeS1jb21waWxlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2RpYWxlY3QvcG9zdGdyZXMvcG9zdGdyZXMtYWRhcHRlci5qcyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvYnVpbGRlci50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvaW50cm9zcGVjdGlvbi50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2hlbHBlcnMvcG9zdGdyZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RtbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRGVsZXRlUmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJFcnJvcixcbiAgdHlwZSBBZGFwdGVySW5zZXJ0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJRdWVyeVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyVXBkYXRlUmVzdWx0LFxuICB0eXBlIENvbHVtbixcbiAgY3JlYXRlQWRhcHRlckVycm9yLFxuICB0eXBlIEZpbHRlck9wZXJhdG9yLFxuICB0eXBlIFRhYmxlLFxufSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRvciB9IGZyb20gXCIuLi9leGVjdXRvclwiO1xuaW1wb3J0IHR5cGUgeyBRdWVyeSwgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IFBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSB9IGZyb20gXCIuL2RhdGF0eXBlXCI7XG5pbXBvcnQgeyBnZXREZWxldGVRdWVyeSwgZ2V0SW5zZXJ0UXVlcnksIGdldFNlbGVjdFF1ZXJ5LCBnZXRVcGRhdGVRdWVyeSB9IGZyb20gXCIuL2RtbFwiO1xuaW1wb3J0IHsgZ2V0VGFibGVzUXVlcnksIGdldFRpbWV6b25lUXVlcnksIG1vY2tUYWJsZXNRdWVyeSwgbW9ja1RpbWV6b25lUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zdGdyZXNBZGFwdGVyUmVxdWlyZW1lbnRzIHtcbiAgZXhlY3V0b3I6IEV4ZWN1dG9yO1xuICBub1BhcmFtZXRlcnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9zdGdyZXNBZGFwdGVyKHJlcXVpcmVtZW50czogUG9zdGdyZXNBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLm90aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0U2NoZW1hOiBcInB1YmxpY1wiLFxuICAgIGFzeW5jIGludHJvc3BlY3Qob3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0YWJsZXNRdWVyeSA9IGdldFRhYmxlc1F1ZXJ5KG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgdGltZXpvbmVRdWVyeSA9IGdldFRpbWV6b25lUXVlcnkoKTtcblxuICAgICAgICBjb25zdCBbW3RhYmxlc0Vycm9yLCB0YWJsZXNdLCBbdGltZXpvbmVFcnJvciwgdGltZXpvbmVzXV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0YWJsZXNRdWVyeSwgb3B0aW9ucyksXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0aW1lem9uZVF1ZXJ5LCBvcHRpb25zKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHRhYmxlc0Vycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB0YWJsZXNFcnJvciwgcXVlcnk6IHRhYmxlc1F1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWV6b25lRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRpbWV6b25lRXJyb3IsIHF1ZXJ5OiB0aW1lem9uZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZXpvbmUgPSB0aW1lem9uZXNbMF0/LnRpbWV6b25lO1xuXG4gICAgICAgIGlmICghdGltZXpvbmUpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IG5ldyBFcnJvcihcIlRpbWV6b25lIG5vdCBmb3VuZFwiKSwgcXVlcnk6IHRpbWV6b25lUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyB0YWJsZXMsIHRpbWV6b25lLCBxdWVyeTogdGFibGVzUXVlcnkgfSldO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHF1ZXJ5KGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJRdWVyeVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0U2VsZWN0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyBmaWx0ZXJlZFJvd0NvdW50OiByZXN1bHRzWzBdPy5vaWQgfHwgXCIwXCIsIHJvd3M6IHJlc3VsdHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGluc2VydChkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW5zZXJ0UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRJbnNlcnRRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IFtlcnJvciwgcm93c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3MsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlKGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJVcGRhdGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFVwZGF0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcm93XSA9IHJlc3VsdHM7XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjdXN0b20gZXJyb3I/XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJVcGRhdGUgZmFpbGVkXCIpLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3csIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGRlbGV0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyRGVsZXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXREZWxldGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IFtlcnJvcl0gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IC4uLmRldGFpbHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnRyb3NwZWN0aW9uKGFyZ3M6IHsgdGFibGVzOiBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+OyB0aW1lem9uZTogc3RyaW5nOyBxdWVyeTogUXVlcnkgfSkge1xuICBjb25zdCB7IHRhYmxlcywgdGltZXpvbmUsIHF1ZXJ5IH0gPSBhcmdzO1xuXG4gIHJldHVybiB0YWJsZXMucmVkdWNlKFxuICAgIChyZXN1bHQsIHJvdykgPT4ge1xuICAgICAgY29uc3QgeyBzY2hlbWFzIH0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0gPSByb3c7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zLnJlZHVjZShcbiAgICAgICAgKGNvbHVtbnMsIGNvbHVtbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZGF0YXR5cGUsIGRhdGF0eXBlX3NjaGVtYSwgbmFtZTogY29sdW1uTmFtZSwgb3B0aW9ucywgbnVsbGFibGUgfSA9IGNvbHVtbjtcblxuICAgICAgICAgIGNvbnN0IGlzQXJyYXkgPSBkYXRhdHlwZS5zdGFydHNXaXRoKFwiX1wiKTtcbiAgICAgICAgICBjb25zdCBzdHJpcHBlZERhdGFUeXBlID0gaXNBcnJheSA/IGRhdGF0eXBlLnNsaWNlKDEpIDogZGF0YXR5cGU7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29sdW1ucyxcbiAgICAgICAgICAgIFtjb2x1bW5OYW1lXToge1xuICAgICAgICAgICAgICBkYXRhdHlwZToge1xuICAgICAgICAgICAgICAgIC4uLihQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEFbc3RyaXBwZWREYXRhVHlwZV0gfHwge1xuICAgICAgICAgICAgICAgICAgZ3JvdXA6IG9wdGlvbnMubGVuZ3RoID4gMCA/IFwiZW51bVwiIDogXCJyYXdcIixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBpc0FycmF5LFxuICAgICAgICAgICAgICAgIGlzTmF0aXZlOiBkYXRhdHlwZV9zY2hlbWEgPT09IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgICAgICAgIG5hbWU6IGlzQXJyYXkgPyBgJHtzdHJpcHBlZERhdGFUeXBlfVtdYCA6IHN0cmlwcGVkRGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IGRhdGF0eXBlX3NjaGVtYSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaXNDb21wdXRlZDogY29sdW1uLmNvbXB1dGVkLFxuICAgICAgICAgICAgICBpc0luUHJpbWFyeUtleTogY29sdW1uLnBrLFxuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICBudWxsYWJsZSxcbiAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICBma1NjaGVtYTogY29sdW1uLmZvcmVpZ25fa2V5X3NjaGVtYSxcbiAgICAgICAgICAgICAgZmtUYWJsZTogY29sdW1uLmZvcmVpZ25fa2V5X3RhYmxlLFxuICAgICAgICAgICAgICBma0NvbHVtbjogY29sdW1uLmZvcmVpZ25fa2V5X2NvbHVtbixcbiAgICAgICAgICAgIH0gYXMgY29uc3Qgc2F0aXNmaWVzIENvbHVtbixcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBUYWJsZVtcImNvbHVtbnNcIl0sXG4gICAgICApO1xuXG4gICAgICBpZiAoc2NoZW1hc1tzY2hlbWFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2NoZW1hc1tzY2hlbWFdID0ge1xuICAgICAgICAgIG5hbWU6IHNjaGVtYSxcbiAgICAgICAgICB0YWJsZXM6IHt9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBzY2hlbWFzW3NjaGVtYV0udGFibGVzW3RhYmxlTmFtZV0gPSB7XG4gICAgICAgIGNvbHVtbnM6IGNvbHVtbnNSZWNvcmQsXG4gICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjaGVtYXM6IHsgcHVibGljOiB7IHRhYmxlczoge30sIG5hbWU6IFwicHVibGljXCIgfSB9LFxuICAgICAgdGltZXpvbmUsXG4gICAgICBmaWx0ZXJPcGVyYXRvcnMsXG4gICAgICBxdWVyeSxcbiAgICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCBhcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCxcbiAgKTtcbn1cblxuY29uc3QgZmlsdGVyT3BlcmF0b3JzID0gW1xuICBcIj1cIixcbiAgXCIhPVwiLFxuICBcIj5cIixcbiAgXCI+PVwiLFxuICBcIjxcIixcbiAgXCI8PVwiLFxuICBcImlzXCIsXG4gIFwiaXMgbm90XCIsXG4gIFwibGlrZVwiLFxuICBcIm5vdCBsaWtlXCIsXG4gIFwiaWxpa2VcIixcbiAgXCJub3QgaWxpa2VcIixcbl0gc2F0aXNmaWVzIEZpbHRlck9wZXJhdG9yW107XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrSW50cm9zcGVjdCgpIHtcbiAgY29uc3QgdGFibGVzID0gbW9ja1RhYmxlc1F1ZXJ5KCk7XG4gIGNvbnN0IFt7IHRpbWV6b25lIH1dID0gbW9ja1RpbWV6b25lUXVlcnkoKTtcbiAgY29uc3QgcXVlcnkgPSB7IHBhcmFtZXRlcnM6IFtdLCBzcWw6IFwiPG1vY2tlZD5cIiB9IGFzIFF1ZXJ5O1xuXG4gIHJldHVybiBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgdGFibGVzLCB0aW1lem9uZSwgcXVlcnkgfSkgYXMge1xuICAgIC8vIGJlc3QgZWZmb3J0LCBubyBuZWVkIGdvIG92ZXJib2FyZC5cbiAgICBzY2hlbWFzOiB7XG4gICAgICBbSyBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcInNjaGVtYVwiXV06IHtcbiAgICAgICAgbmFtZTogSztcbiAgICAgICAgdGFibGVzOiB7XG4gICAgICAgICAgW1QgaW4gKHR5cGVvZiB0YWJsZXMpW251bWJlcl1bXCJuYW1lXCJdXTogVGFibGU7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gICAgdGltZXpvbmU6IHR5cGVvZiB0aW1lem9uZTtcbiAgICBmaWx0ZXJPcGVyYXRvcnM6IEZpbHRlck9wZXJhdG9yW107XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdDtcbn1cbiIsICJpbXBvcnQgeyBRdWVyeSB9IGZyb20gXCIuL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEJpZ0ludFN0cmluZywgRWl0aGVyLCBOdW1lcmljU3RyaW5nIH0gZnJvbSBcIi4vdHlwZS11dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXIge1xuICAvKipcbiAgICogVGhlIHNjaGVtYSBzdHVkaW8gd2lsbCBjaG9vc2UgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogZS5nLiBgcHVibGljYCBmb3IgUG9zdGdyZVNRTFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFNjaGVtYT86IHN0cmluZztcblxuICAvKipcbiAgICogSW50cm9zcGVjdHMgdGhlIGRhdGFiYXNlIGFuZCByZXR1cm5zIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNjaGVtYXMsIHRhYmxlcywgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBpbnRyb3NwZWN0aW9uIHJlcXVlc3QuXG4gICAqL1xuICBpbnRyb3NwZWN0KG9wdGlvbnM6IEFkYXB0ZXJJbnRyb3NwZWN0T3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ+PjtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBzdHJ1Y3R1cmVkIHF1ZXJ5IGFnYWluc3QgdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgcXVlcnkoZGV0YWlsczogQWRhcHRlclF1ZXJ5RGV0YWlscywgb3B0aW9uczogQWRhcHRlclF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclF1ZXJ5UmVzdWx0Pj47XG5cbiAgLyoqXG4gICAqIEluc2VydHMgYSBzaW5nbGUgcm93IGludG8gdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgaW5zZXJ0KFxuICAgIGRldGFpbHM6IEFkYXB0ZXJJbnNlcnREZXRhaWxzLFxuICAgIG9wdGlvbnM6IEFkYXB0ZXJJbnNlcnRPcHRpb25zLFxuICApOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJJbnNlcnRSZXN1bHQ+PjtcblxuICAvKipcbiAgICogVXBkYXRlcyBhIGdpdmVuIHJvdyBpbiB0aGUgZGF0YWJhc2Ugd2l0aCBnaXZlbiBjaGFuZ2VzLlxuICAgKi9cbiAgdXBkYXRlKFxuICAgIGRldGFpbHM6IEFkYXB0ZXJVcGRhdGVEZXRhaWxzLFxuICAgIG9wdGlvbnM6IEFkYXB0ZXJVcGRhdGVPcHRpb25zLFxuICApOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJVcGRhdGVSZXN1bHQ+PjtcblxuICAvKipcbiAgICogRGVsZXRlcyBnaXZlbiByb3dzIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgZGVsZXRlKFxuICAgIGRldGFpbHM6IEFkYXB0ZXJEZWxldGVEZXRhaWxzLFxuICAgIG9wdGlvbnM6IEFkYXB0ZXJEZWxldGVPcHRpb25zLFxuICApOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJEZWxldGVSZXN1bHQ+Pjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyQmFzZU9wdGlvbnMge31cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVySW50cm9zcGVjdE9wdGlvbnMgZXh0ZW5kcyBBZGFwdGVyQmFzZU9wdGlvbnMge31cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyUXVlcnlPcHRpb25zIGV4dGVuZHMgQWRhcHRlckJhc2VPcHRpb25zIHtcbiAgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJJbnNlcnRPcHRpb25zIGV4dGVuZHMgQWRhcHRlckJhc2VPcHRpb25zIHt9XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclVwZGF0ZU9wdGlvbnMgZXh0ZW5kcyBBZGFwdGVyQmFzZU9wdGlvbnMge31cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyRGVsZXRlT3B0aW9ucyBleHRlbmRzIEFkYXB0ZXJCYXNlT3B0aW9ucyB7fVxuXG50eXBlIFNjaGVtYU5hbWUgPSBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckludHJvc3BlY3RSZXN1bHQge1xuICBzY2hlbWFzOiBSZWNvcmQ8U2NoZW1hTmFtZSwgU2NoZW1hPjtcbiAgdGltZXpvbmU6IHN0cmluZztcbiAgZmlsdGVyT3BlcmF0b3JzOiBGaWx0ZXJPcGVyYXRvcltdO1xuICBxdWVyeTogUXVlcnk7XG59XG5cbnR5cGUgVGFibGVOYW1lID0gc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGFibGVzOiBSZWNvcmQ8VGFibGVOYW1lLCBUYWJsZT47XG59XG5cbnR5cGUgQ29sdW1uTmFtZSA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZSB7XG4gIGNvbHVtbnM6IFJlY29yZDxDb2x1bW5OYW1lLCBDb2x1bW4+O1xuICBuYW1lOiBUYWJsZU5hbWU7XG4gIHNjaGVtYTogU2NoZW1hTmFtZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW4ge1xuICBkYXRhdHlwZTogRGF0YVR5cGU7XG4gIGlzQ29tcHV0ZWQ6IGJvb2xlYW47XG4gIGlzSW5QcmltYXJ5S2V5OiBib29sZWFuO1xuICBuYW1lOiBDb2x1bW5OYW1lO1xuICBudWxsYWJsZTogYm9vbGVhbjtcbiAgc2NoZW1hOiBTY2hlbWFOYW1lO1xuICB0YWJsZTogVGFibGVOYW1lO1xuICBma1NjaGVtYTogU2NoZW1hTmFtZSB8IG51bGw7XG4gIGZrQ29sdW1uOiBDb2x1bW5OYW1lIHwgbnVsbDtcbiAgZmtUYWJsZTogVGFibGVOYW1lIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhVHlwZSB7XG4gIC8qKlxuICAgKiBBIHNpbXBsaWZpY2F0aW9uL25vcm1hbGl6YXRpb24gZm9yIFVJIHVzYWdlLlxuICAgKlxuICAgKiBlLmcuIHZhcmNoYXIgYW5kIGNoYXIgYXJlIHN0cmluZ3MuXG4gICAqL1xuICBncm91cDogRGF0YVR5cGVHcm91cDtcblxuICAvKipcbiAgICogSXMgdGhpcyBhIG5hdGl2ZSBhcnJheSB0eXBlP1xuICAgKi9cbiAgaXNBcnJheTogYm9vbGVhbjtcblxuICAvKipcbiAgICogSXMgYSBuYXRpdmUgZGF0YWJhc2UgZGF0YXR5cGUgb3IgYSB1c2VyLWRlZmluZWQgZGF0YXR5cGU/XG4gICAqXG4gICAqIGUuZy4gUG9zdGdyZVNRTCBlbnVtcyBhcmUgdXNlci1kZWZpbmVkIGRhdGF0eXBlcywgYnV0IGBpbnQ0YCBpcyBhIG5hdGl2ZSBkYXRhdHlwZS5cbiAgICovXG4gIGlzTmF0aXZlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaWxsIGJlIGRpc3BsYXllZCBhcy1pcy5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRW51bSB2YWx1ZXMgZm9yIGVudW0gdHlwZXMuXG4gICAqL1xuICBvcHRpb25zOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHNjaGVtYSB0aGUgZGF0YXR5cGUgYmVsb25ncyB0by5cbiAgICovXG4gIHNjaGVtYTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBEYXRhVHlwZUdyb3VwID0gXCJzdHJpbmdcIiB8IFwiZGF0ZXRpbWVcIiB8IFwiYm9vbGVhblwiIHwgXCJlbnVtXCIgfCBcInRpbWVcIiB8IFwicmF3XCIgfCBcIm51bWVyaWNcIiB8IFwianNvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJRdWVyeURldGFpbHMge1xuICAvKipcbiAgICogWmVyby1iYXNlZCBpbmRleCBvZiB0aGUgcGFnZSB0byBmZXRjaC5cbiAgICovXG4gIHBhZ2VJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGZldGNoIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgcGFnZVNpemU6IG51bWJlcjtcblxuICAvKipcbiAgICogU29ydCBvcmRlciBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgc29ydE9yZGVyOiBTb3J0T3JkZXJJdGVtW107XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byBzZWxlY3QgZnJvbS5cbiAgICovXG4gIHRhYmxlOiBUYWJsZTtcblxuICAvKipcbiAgICogVGhlIGZpbHRlciB0byBiZSBhcHBsaWVkLlxuICAgKi9cbiAgZmlsdGVyPzogRmlsdGVyR3JvdXA7XG59XG5cbmV4cG9ydCB0eXBlIEZpbHRlck9wZXJhdG9yID1cbiAgfCBcIj1cIlxuICB8IFwiIT1cIlxuICB8IFwiPlwiXG4gIHwgXCI+PVwiXG4gIHwgXCI8XCJcbiAgfCBcIjw9XCJcbiAgfCBcImlzXCJcbiAgfCBcImlzIG5vdFwiXG4gIHwgXCJsaWtlXCJcbiAgfCBcIm5vdCBsaWtlXCJcbiAgfCBcImlsaWtlXCJcbiAgfCBcIm5vdCBpbGlrZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkZpbHRlciB7XG4gIGtpbmQ6IFwiQ29sdW1uRmlsdGVyXCI7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3I7XG4gIHZhbHVlOiB1bmtub3duO1xuICBhZnRlcjogXCJhbmRcIiB8IFwib3JcIjtcbiAgaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cCB7XG4gIGtpbmQ6IFwiRmlsdGVyR3JvdXBcIjtcbiAgZmlsdGVyczogKENvbHVtbkZpbHRlciB8IEZpbHRlckdyb3VwKVtdO1xuICBhZnRlcjogXCJhbmRcIiB8IFwib3JcIjtcbiAgaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTb3J0T3JkZXJJdGVtIHtcbiAgLyoqXG4gICAqIFRoZSBjb2x1bW4gdG8gc29ydCBieS5cbiAgICovXG4gIGNvbHVtbjogQ29sdW1uTmFtZTtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGlvbiB0byBzb3J0IHRoZSBjb2x1bW4gYnkuXG4gICAqL1xuICBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb247XG59XG5cbmV4cG9ydCB0eXBlIFNvcnREaXJlY3Rpb24gPSBcImFzY1wiIHwgXCJkZXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBBZGFwdGVyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHF1ZXJ5PzogUXVlcnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclF1ZXJ5UmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyB0aGUgcXVlcnkgd291bGQgcmV0dXJuIGlmIG5vdCBsaW1pdGVkLlxuICAgKlxuICAgKiBJZiB0aGUgZGF0YWJhc2UgZG9lcyBub3Qgc3VwcG9ydCBjb3VudGluZyByb3dzLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gYEluZmluaXR5YC5cbiAgICovXG4gIGZpbHRlcmVkUm93Q291bnQ6IG51bWJlciB8IGJpZ2ludCB8IE51bWVyaWNTdHJpbmcgfCBCaWdJbnRTdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb3dzIHJldHVybmVkIGJ5IHRoZSBxdWVyeS5cbiAgICovXG4gIHJvd3M6IFJlY29yZDxDb2x1bW5OYW1lLCB1bmtub3duPltdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0ZWQgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgcXVlcnk6IFF1ZXJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJJbnNlcnREZXRhaWxzIHtcbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byBpbnNlcnQgaW50by5cbiAgICovXG4gIHRhYmxlOiBUYWJsZTtcblxuICAvKipcbiAgICogVGhlIHZhbHVlcyB0byBpbnNlcnQgaW50byB0aGUgdGFibGUuXG4gICAqIC0gVGhlIGtleXMgc2hvdWxkIG1hdGNoIHRoZSBjb2x1bW4gbmFtZXMgaW4gdGhlIHRhYmxlLlxuICAgKiAtIFRoZSB2YWx1ZXMgc2hvdWxkIGJlIHRoZSB2YWx1ZXMgdG8gaW5zZXJ0IGludG8gdGhlIHRhYmxlLlxuICAgKi9cbiAgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVySW5zZXJ0UmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBmcmVzaGx5IGluc2VydGVkIHJvdyBkYXRhLlxuICAgKi9cbiAgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcblxuICAvKipcbiAgICogVGhlIGV4ZWN1dGVkIHF1ZXJ5IHN0cmluZy5cbiAgICovXG4gIHF1ZXJ5OiBRdWVyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyVXBkYXRlRGV0YWlscyB7XG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRvIGFwcGx5IHRvIHRoZSByb3cuXG4gICAqL1xuICBjaGFuZ2VzOiBSZWNvcmQ8Q29sdW1uTmFtZSwgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSByb3cgdG8gdXBkYXRlLlxuICAgKi9cbiAgcm93OiBSZWNvcmQ8Q29sdW1uTmFtZSwgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byB1cGRhdGUgaW4uXG4gICAqL1xuICB0YWJsZTogVGFibGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclVwZGF0ZVJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgdXBkYXRlZCByb3cgZGF0YS5cbiAgICovXG4gIHJvdzogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+ICYge1xuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIGNoYW5nZXMgd2VyZSBhcHBsaWVkIGluIGRhdGFiYXNlIHRpbWUuXG4gICAgICovXG4gICAgX19wc191cGRhdGVkX2F0X186IHN0cmluZyB8IG51bWJlciB8IERhdGU7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRlZCBxdWVyeSBzdHJpbmcuXG4gICAqL1xuICBxdWVyeTogUXVlcnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckRlbGV0ZURldGFpbHMge1xuICAvKipcbiAgICogVGhlIHJvd3MgdG8gZGVsZXRlLlxuICAgKi9cbiAgcm93czogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+W107XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byBkZWxldGUgZnJvbS5cbiAgICovXG4gIHRhYmxlOiBUYWJsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyRGVsZXRlUmVzdWx0IHtcbiAgcm93czogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+W107XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRlZCBxdWVyeSBzdHJpbmcuXG4gICAqL1xuICBxdWVyeTogUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBZGFwdGVyRXJyb3IoYXJnczogeyBlcnJvcjogRXJyb3I7IHF1ZXJ5PzogUXVlcnkgfSkge1xuICBjb25zdCB7IGVycm9yLCBxdWVyeSB9ID0gYXJncztcblxuICBjb25zdCBhZGFwdGVyRXJyb3IgPSBlcnJvciBhcyBBZGFwdGVyRXJyb3I7XG5cbiAgYWRhcHRlckVycm9yLnF1ZXJ5ID0gcXVlcnk7XG5cbiAgcmV0dXJuIFthZGFwdGVyRXJyb3JdIGFzIFtBZGFwdGVyRXJyb3JdO1xufVxuIiwgImltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxuZXhwb3J0IGNvbnN0IFBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQTogUmVjb3JkPHN0cmluZywgUGljazxEYXRhVHlwZSwgXCJncm91cFwiPj4gPSB7XG4gIGJvb2w6IHtcbiAgICBncm91cDogXCJib29sZWFuXCIsXG4gIH0sXG4gIGJvb2xlYW46IHtcbiAgICBncm91cDogXCJib29sZWFuXCIsXG4gIH0sXG4gIGJ5dGVhOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGNoYXI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgY2l0ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCdcbiAgICovXG4gIGRhdGU6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICAvKipcbiAgICogQGV4YW1wbGUgJzEgZGF5IDIgaG91cnMnXG4gICAqL1xuICBpbnRlcnZhbDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBuYW1lOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHZhcmNoYXI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICAvKipcbiAgICogc2hvcnQgZm9ybSBvZiBgdGltZSB3aXRob3V0IHRpbWUgem9uZWAuXG4gICAqXG4gICAqIEBleGFtcGxlICcxNDozMDowMCdcbiAgICovXG4gIHRpbWU6IHtcbiAgICBncm91cDogXCJ0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBzaG9ydCBmb3JtIG9mIGB0aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCdcbiAgICovXG4gIHRpbWVzdGFtcDoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBzaG9ydCBmb3JtIG9mIGB0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCswMCdcbiAgICovXG4gIHRpbWVzdGFtcHR6OiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIGxvbmcgZm9ybSBvZiBgdGltZXN0YW1wYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDAnXG4gICAqL1xuICBcInRpbWVzdGFtcCB3aXRob3V0IHRpbWUgem9uZVwiOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIGxvbmcgZm9ybSBvZiBgdGltZXN0YW1wdHpgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCswMCdcbiAgICovXG4gIFwidGltZXN0YW1wIHdpdGggdGltZSB6b25lXCI6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICAvKipcbiAgICogc2hvcnQgZm9ybSBvZiBgdGltZSB3aXRoIHRpbWUgem9uZWAuXG4gICAqXG4gICAqIEBleGFtcGxlICcxNDozMDowMCswMDowMCdcbiAgICovXG4gIHRpbWV0ejoge1xuICAgIGdyb3VwOiBcInRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIGxvbmcgZm9ybSBvZiBgdGltZWAuXG4gICAqXG4gICAqIEBleGFtcGxlICcxNDozMDowMCdcbiAgICovXG4gIFwidGltZSB3aXRob3V0IHRpbWUgem9uZVwiOiB7XG4gICAgZ3JvdXA6IFwidGltZVwiLFxuICB9LFxuICAvKipcbiAgICogbG9uZyBmb3JtIG9mIGB0aW1ldHpgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCswMCdcbiAgICovXG4gIFwidGltZSB3aXRoIHRpbWUgem9uZVwiOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgdXVpZDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICAvLyBOdW1lcmljIHR5cGVzXG4gIGludDI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGludDQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGludDg6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIHNtYWxsaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBpbnRlZ2VyOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBiaWdpbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGRlY2ltYWw6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIG51bWVyaWM6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIHJlYWw6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGZsb2F0NDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZmxvYXQ4OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBcImRvdWJsZSBwcmVjaXNpb25cIjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAganNvbjoge1xuICAgIGdyb3VwOiBcImpzb25cIixcbiAgfSxcbiAganNvbmI6IHtcbiAgICBncm91cDogXCJqc29uXCIsXG4gIH0sXG59O1xuIiwgImltcG9ydCB7IEV4cHJlc3Npb24sIEV4cHJlc3Npb25CdWlsZGVyLCBzcWwsIFNxbEJvb2wgfSBmcm9tIFwia3lzZWx5XCI7XG5cbmltcG9ydCB0eXBlIHtcbiAgQWRhcHRlckRlbGV0ZURldGFpbHMsXG4gIEFkYXB0ZXJJbnNlcnREZXRhaWxzLFxuICBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgQ29sdW1uRmlsdGVyLFxuICBGaWx0ZXJHcm91cCxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB7IGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzLCB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGNvbXBpbGUgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgQmlnSW50U3RyaW5nIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IGdldFBvc3RncmVTUUxCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlclwiO1xuaW1wb3J0IHR5cGUgeyBtb2NrVGFibGVzUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbi8qKlxuICogYGN0aWRgIGlzIGEgc3lzdGVtIGNvbHVtbiB0aGF0IHJlcHJlc2VudHMgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIGEgcm93IGluIGEgdGFibGUuXG4gKiBJdCBpcyBhIHR1cGxlIG9mIHR3byBpbnRlZ2VyczogYChibG9ja051bWJlciwgdHVwbGVJbmRleClgLlxuICogSXQgaXMgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSBhIHJvdyBpbiBhIHRhYmxlLCBldmVuIGlmIHRoZSByb3cgaGFzIG5vIHByaW1hcnkga2V5LCBvciBvdGhlciB1bmlxdWUgY29uc3RyYWludHMuXG4gKlxuICogRXhhbXBsZTogJygwLDIzKScgcmVwcmVzZW50cyB0aGUgMjR0aCByb3cgaW4gdGhlIGZpcnN0IGJsb2NrIG9mIHRoZSB0YWJsZS5cbiAqL1xuZXhwb3J0IHR5cGUgQ1RJRGFzVGV4dCA9IGAoJHtudW1iZXJ9LCR7bnVtYmVyfSlgO1xuXG4vKipcbiAqIEluc2VydHMgb25lIG9yIG1vcmUgcm93cyBpbnRvIGEgdGFibGUgYW5kIHJldHVybnMgdGhlIGluc2VydGVkIHJvd3MgYWxvbmcgd2l0aCB0aGVpciBgY3RpZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnNlcnRRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlckluc2VydERldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3QgeyB0YWJsZSwgcm93cyB9ID0gZGV0YWlscztcbiAgY29uc3QgeyBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSwgY29sdW1ucyB9ID0gdGFibGU7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIHsgY3RpZDogdW5rbm93biB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuICBjb25zdCBjb2xzID0gT2JqZWN0LmtleXMoY29sdW1ucyk7XG4gIGNvbnN0IGVtcHR5Um93V29ya2Fyb3VuZCA9IHsgW2NvbHNbMF0hXTogc3FsYGRlZmF1bHRgIH07XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgICAgLmluc2VydEludG8odGFibGVOYW1lKVxuICAgICAgLnZhbHVlcyhyb3dzLm1hcCgocm93KSA9PiAoT2JqZWN0LmtleXMocm93KS5sZW5ndGggPT09IDAgPyBlbXB0eVJvd1dvcmthcm91bmQgOiByb3cpKSlcbiAgICAgIC5yZXR1cm5pbmcoY29scylcbiAgICAgIC5yZXR1cm5pbmcoKGViKSA9PiBlYi5jYXN0PENUSURhc1RleHQ+KFwiY3RpZFwiLCBcInRleHRcIikuYXMoXCJjdGlkXCIpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBzZWxlY3RzIGFsbCBjb2x1bW5zIGZyb20gYSB0YWJsZSwgYWxvbmcgd2l0aCB0aGUgYGN0aWRgIGNvbHVtbiwgYW5kIHVuYm91bmQgcm93IGNvdW50IGFzIGBvaWRgIChyZXNlcnZlZCBjb2x1bW4gbmFtZSB0aGF0IGNhbm5vdCBjb25mbGljdCB3aXRoIHVzZXIgY29sdW1ucykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclF1ZXJ5RGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgcGFnZUluZGV4LFxuICAgIHBhZ2VTaXplLFxuICAgIHNvcnRPcmRlcixcbiAgICB0YWJsZTogeyBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSwgY29sdW1ucyB9LFxuICAgIGZpbHRlciA9IHsga2luZDogXCJGaWx0ZXJHcm91cFwiLCBhZnRlcjogXCJhbmRcIiwgZmlsdGVyczogW10gfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIHsgY3RpZDogdW5rbm93biB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuICBjb25zdCBjb2xzID0gT2JqZWN0LmtleXMoY29sdW1ucyk7XG5cbiAgY29uc3QgY291bnRRdWVyeSA9IGJ1aWxkZXJcbiAgICAud2l0aFNjaGVtYShzY2hlbWEpXG4gICAgLnNlbGVjdEZyb20odGFibGVOYW1lKVxuICAgIC5zZWxlY3QoKGViKSA9PiBlYi5jYXN0PEJpZ0ludFN0cmluZz4oZWIuZm4uY29hbGVzY2UoZWIuZm4uY291bnRBbGwoKSwgc3FsLmxpdCgwKSksIFwidGV4dFwiKS5hcyhcIm9pZFwiKSk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGgoXCJjb3VudFwiLCAoKSA9PiBjb3VudFF1ZXJ5KVxuICAgICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgICAgLnNlbGVjdEZyb20oW3RhYmxlTmFtZSwgXCJjb3VudFwiXSlcbiAgICAgIC8vIGBvaWRgIGlzIGEgcmVzZXJ2ZWQgY29sdW1uIG5hbWUgaW4gUG9zdGdyZVNRTCwgc28gd2UgdXNlIGl0IGFzIGFuIGFsaWFzIGZvciB0aGUgcm93IGNvdW50IHRvIG5vdCBjb25mbGljdCB3aXRoIHVzZXIgY29sdW1ucy5cbiAgICAgIC5zZWxlY3Qoc3FsLnJlZihcImNvdW50Lm9pZFwiKS4kY2FzdFRvPEJpZ0ludFN0cmluZz4oKS5hcyhcIm9pZFwiKSlcbiAgICAgIC5zZWxlY3QoKGViKSA9PiBlYi5jYXN0PENUSURhc1RleHQ+KFwiY3RpZFwiLCBcInRleHRcIikuYXMoXCJjdGlkXCIpKVxuICAgICAgLnNlbGVjdChjb2xzKVxuICAgICAgLiRjYWxsKChxYikgPT4gc29ydE9yZGVyLnJlZHVjZSgocWIsIGl0ZW0pID0+IHFiLm9yZGVyQnkoaXRlbS5jb2x1bW4sIGl0ZW0uZGlyZWN0aW9uKSwgcWIpKVxuICAgICAgLy8gVE9ETzogY3Vyc29yIHBhZ2luYXRpb24/XG4gICAgICAud2hlcmUoZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbihmaWx0ZXIuZmlsdGVycykpXG4gICAgICAubGltaXQocGFnZVNpemUpXG4gICAgICAvLyB3ZSdyZSBpbmplY3RpbmcgdGhlIG9mZnNldCB2YWx1ZSBoZXJlIHRvIGF2b2lkIHNlcmlhbGl6YXRpb24gY29tcGxleGl0eSAoYGJpZ2ludGAgaXMgYSBuby1nbyBmb3IgYEpTT04uc3RyaW5naWZ5YCkuXG4gICAgICAub2Zmc2V0KHNxbC5saXQoQmlnSW50KHBhZ2VJbmRleCkgKiBCaWdJbnQocGFnZVNpemUpKSksXG4gICk7XG59XG5cbi8vIEhlbHBlciB0byBidWlsZCBhbiBleHByZXNzaW9uIGJ1aWxkZXIgZm9yIGEgc2luZ2xlIGZpbHRlciBvciBhIGdyb3VwXG5mdW5jdGlvbiBidWlsZEJhc2VFeHByZXNzaW9uQnVpbGRlcihcbiAgc3BlYzogQ29sdW1uRmlsdGVyIHwgRmlsdGVyR3JvdXAsXG4pOiAoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gRXhwcmVzc2lvbjxTcWxCb29sPiB7XG4gIGlmIChzcGVjLmtpbmQgPT09IFwiQ29sdW1uRmlsdGVyXCIpIHtcbiAgICByZXR1cm4gKGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IGViKGViLnJlZihzcGVjLmNvbHVtbiksIHNwZWMub3BlcmF0b3IsIHNwZWMudmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uKHNwZWMuZmlsdGVycyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbihcbiAgZmlsdGVyczogKENvbHVtbkZpbHRlciB8IEZpbHRlckdyb3VwKVtdLFxuKTogKGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IEV4cHJlc3Npb248U3FsQm9vbD4ge1xuICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDApIHJldHVybiAoZWIpID0+IGViLmxpdCh0cnVlKTsgLy8gbm8gZmlsdGVycywgYWx3YXlzIHRydWVcblxuICBjb25zdCBvckdyb3Vwc09mQW5kQnVpbGRlcnM6ICgoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gRXhwcmVzc2lvbjxTcWxCb29sPilbXVtdID0gW107XG4gIGxldCBjdXJyZW50QW5kR3JvdXBCdWlsZGVyczogKChlYjogRXhwcmVzc2lvbkJ1aWxkZXI8YW55LCBhbnk+KSA9PiBFeHByZXNzaW9uPFNxbEJvb2w+KVtdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgY3VycmVudEFuZEdyb3VwQnVpbGRlcnMucHVzaChidWlsZEJhc2VFeHByZXNzaW9uQnVpbGRlcihmaWx0ZXJzW2ldISkpO1xuXG4gICAgLy8gJm4gQU5EIGdyb3VwIGVuZHMgaWYgaXQncyB0aGUgbGFzdCBmaWx0ZXIsIG9yIHRoZSBpdGVtIGlzIGZvbGxvd2VkIGJ5IGFuICdvcidcbiAgICBpZiAoaSA9PT0gZmlsdGVycy5sZW5ndGggLSAxIHx8IGZpbHRlcnNbaV0hLmFmdGVyID09PSBcIm9yXCIpIHtcbiAgICAgIG9yR3JvdXBzT2ZBbmRCdWlsZGVycy5wdXNoKGN1cnJlbnRBbmRHcm91cEJ1aWxkZXJzKTtcbiAgICAgIGN1cnJlbnRBbmRHcm91cEJ1aWxkZXJzID0gW107IC8vIHN0YXJ0IGEgbmV3IGdyb3VwXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlYjogRXhwcmVzc2lvbkJ1aWxkZXI8YW55LCBhbnk+KSA9PiB7XG4gICAgY29uc3QgYW5kRXhwcmVzc2lvbnMgPSBvckdyb3Vwc09mQW5kQnVpbGRlcnMubWFwKChncm91cCkgPT4ge1xuICAgICAgcmV0dXJuIGViLmFuZChncm91cC5tYXAoKGJ1aWxkZXIpID0+IGJ1aWxkZXIoZWIpKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZWIub3IoYW5kRXhwcmVzc2lvbnMpO1xuICB9O1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1NlbGVjdFF1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKFwiMjAyNS0wMS0yNlQyMTo1NjoxMi4zNDVaXCIpLFxuICAgICAgY3RpZDogXCIoMCwxKVwiLFxuICAgICAgZGVsZXRlZF9hdDogbnVsbCxcbiAgICAgIGlkOiAxLFxuICAgICAgbmFtZTogXCJKb2huIERvZVwiLFxuICAgICAgb2lkOiBcIjJcIixcbiAgICAgIHJvbGU6IFwiYWRtaW5cIixcbiAgICAgIG5hbWVfcm9sZTogXCJKb25uIERvZSAtIGFkbWluXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjA6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGN0aWQ6IFwiKDAsMilcIixcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMixcbiAgICAgIG5hbWU6IFwiSmFuZSBEb2VcIixcbiAgICAgIG9pZDogXCIyXCIsXG4gICAgICByb2xlOiBcInBvd2VydXNlclwiLFxuICAgICAgbmFtZV9yb2xlOiBcIkphbmUgRG9lIC0gcG93ZXJ1c2VyXCIsXG4gICAgfSxcbiAgXSBhcyBjb25zdCBzYXRpc2ZpZXMge1xuICAgIC8vIGJlc3QgZWZmb3J0IG5vIG5lZWQgdG8gZ28gb3ZlcmJvYXJkXG4gICAgW0sgaW4gUmV0dXJuVHlwZTx0eXBlb2YgbW9ja1RhYmxlc1F1ZXJ5PlsxXVtcImNvbHVtbnNcIl1bbnVtYmVyXVtcIm5hbWVcIl0gfCBcImN0aWRcIiB8IFwib2lkXCJdOiB1bmtub3duO1xuICB9W107XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgdXBkYXRlcyBhIGdpdmVuIHJvdyBpbiBhIHRhYmxlIHdpdGggZ2l2ZW4gY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgY2hhbmdlcyxcbiAgICByb3csXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIHsgY3RpZDogdW5rbm93biB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuICBjb25zdCBjb2xzID0gT2JqZWN0LmtleXMoY29sdW1ucyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgICAgLnVwZGF0ZVRhYmxlKHRhYmxlTmFtZSlcbiAgICAgIC5zZXQoY2hhbmdlcylcbiAgICAgIC4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhbcm93XSwgY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGNvbHMpXG4gICAgICAucmV0dXJuaW5nKChlYikgPT4gW1xuICAgICAgICBlYi5jYXN0PENUSURhc1RleHQ+KFwiY3RpZFwiLCBcInRleHRcIikuYXMoXCJjdGlkXCIpLFxuICAgICAgICBlYlxuICAgICAgICAgIC5jYXN0PEJpZ0ludFN0cmluZz4oZWIuZm4oXCJmbG9vclwiLCBbZWIoZWIuZm4oXCJleHRyYWN0XCIsIFtzcWxgZXBvY2ggZnJvbSBub3coKWBdKSwgXCIqXCIsIDFfMDAwXzAwMCldKSwgXCJ0ZXh0XCIpXG4gICAgICAgICAgLmFzKFwiX19wc191cGRhdGVkX2F0X19cIiksXG4gICAgICBdKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBkZWxldGVzIGEgZ2l2ZW4gc2V0IG9mIHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlckRlbGV0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHJvd3MsXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIHsgY3RpZDogdW5rbm93biB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKGJ1aWxkZXIud2l0aFNjaGVtYShzY2hlbWEpLmRlbGV0ZUZyb20odGFibGVOYW1lKS4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhyb3dzLCBjb2x1bW5zKSkpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9yYXctYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IEFsaWFzTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FsaWFzLW5vZGUuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgTk9PUF9RVUVSWV9FWEVDVVRPUiB9IGZyb20gJy4uL3F1ZXJ5LWV4ZWN1dG9yL25vb3AtcXVlcnktZXhlY3V0b3IuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9pZGVudGlmaWVyLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNPcGVyYXRpb25Ob2RlU291cmNlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmNsYXNzIFJhd0J1aWxkZXJJbXBsIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBnZXQgZXhwcmVzc2lvblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBpc1Jhd0J1aWxkZXIoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gbmV3IEFsaWFzZWRSYXdCdWlsZGVySW1wbCh0aGlzLCBhbGlhcyk7XG4gICAgfVxuICAgICRjYXN0VG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmF3QnVpbGRlckltcGwoeyAuLi50aGlzLiNwcm9wcyB9KTtcbiAgICB9XG4gICAgJG5vdE51bGwoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmF3QnVpbGRlckltcGwodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICB3aXRoUGx1Z2luKHBsdWdpbikge1xuICAgICAgICByZXR1cm4gbmV3IFJhd0J1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcGx1Z2luczogdGhpcy4jcHJvcHMucGx1Z2lucyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoWy4uLnRoaXMuI3Byb3BzLnBsdWdpbnMsIHBsdWdpbl0pXG4gICAgICAgICAgICAgICAgOiBmcmVlemUoW3BsdWdpbl0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdG9PcGVyYXRpb25Ob2RlKHRoaXMuI2dldEV4ZWN1dG9yKCkpO1xuICAgIH1cbiAgICBjb21waWxlKGV4ZWN1dG9yUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NvbXBpbGUodGhpcy4jZ2V0RXhlY3V0b3IoZXhlY3V0b3JQcm92aWRlcikpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKGV4ZWN1dG9yUHJvdmlkZXIpIHtcbiAgICAgICAgY29uc3QgZXhlY3V0b3IgPSB0aGlzLiNnZXRFeGVjdXRvcihleGVjdXRvclByb3ZpZGVyKTtcbiAgICAgICAgcmV0dXJuIGV4ZWN1dG9yLmV4ZWN1dGVRdWVyeSh0aGlzLiNjb21waWxlKGV4ZWN1dG9yKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgICNnZXRFeGVjdXRvcihleGVjdXRvclByb3ZpZGVyKSB7XG4gICAgICAgIGNvbnN0IGV4ZWN1dG9yID0gZXhlY3V0b3JQcm92aWRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGV4ZWN1dG9yUHJvdmlkZXIuZ2V0RXhlY3V0b3IoKVxuICAgICAgICAgICAgOiBOT09QX1FVRVJZX0VYRUNVVE9SO1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMucGx1Z2lucyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGV4ZWN1dG9yLndpdGhQbHVnaW5zKHRoaXMuI3Byb3BzLnBsdWdpbnMpXG4gICAgICAgICAgICA6IGV4ZWN1dG9yO1xuICAgIH1cbiAgICAjdG9PcGVyYXRpb25Ob2RlKGV4ZWN1dG9yKSB7XG4gICAgICAgIHJldHVybiBleGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5yYXdOb2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgI2NvbXBpbGUoZXhlY3V0b3IpIHtcbiAgICAgICAgcmV0dXJuIGV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLiN0b09wZXJhdGlvbk5vZGUoZXhlY3V0b3IpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmF3QnVpbGRlcihwcm9wcykge1xuICAgIHJldHVybiBuZXcgUmF3QnVpbGRlckltcGwocHJvcHMpO1xufVxuY2xhc3MgQWxpYXNlZFJhd0J1aWxkZXJJbXBsIHtcbiAgICAjcmF3QnVpbGRlcjtcbiAgICAjYWxpYXM7XG4gICAgY29uc3RydWN0b3IocmF3QnVpbGRlciwgYWxpYXMpIHtcbiAgICAgICAgdGhpcy4jcmF3QnVpbGRlciA9IHJhd0J1aWxkZXI7XG4gICAgICAgIHRoaXMuI2FsaWFzID0gYWxpYXM7XG4gICAgfVxuICAgIGdldCBleHByZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcmF3QnVpbGRlcjtcbiAgICB9XG4gICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYWxpYXM7XG4gICAgfVxuICAgIGdldCByYXdCdWlsZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcmF3QnVpbGRlcjtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gQWxpYXNOb2RlLmNyZWF0ZSh0aGlzLiNyYXdCdWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpLCBpc09wZXJhdGlvbk5vZGVTb3VyY2UodGhpcy4jYWxpYXMpXG4gICAgICAgICAgICA/IHRoaXMuI2FsaWFzLnRvT3BlcmF0aW9uTm9kZSgpXG4gICAgICAgICAgICA6IElkZW50aWZpZXJOb2RlLmNyZWF0ZSh0aGlzLiNhbGlhcykpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc3FsLmQudHNcIiAvPlxuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9pZGVudGlmaWVyLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNPcGVyYXRpb25Ob2RlU291cmNlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmltcG9ydCB7IFJhd05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9yYXctbm9kZS5qcyc7XG5pbXBvcnQgeyBWYWx1ZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS92YWx1ZS1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlU3RyaW5nUmVmZXJlbmNlIH0gZnJvbSAnLi4vcGFyc2VyL3JlZmVyZW5jZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VUYWJsZSB9IGZyb20gJy4uL3BhcnNlci90YWJsZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VWYWx1ZUV4cHJlc3Npb24gfSBmcm9tICcuLi9wYXJzZXIvdmFsdWUtcGFyc2VyLmpzJztcbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5SWQgfSBmcm9tICcuLi91dGlsL3F1ZXJ5LWlkLmpzJztcbmltcG9ydCB7IGNyZWF0ZVJhd0J1aWxkZXIgfSBmcm9tICcuL3Jhdy1idWlsZGVyLmpzJztcbmV4cG9ydCBjb25zdCBzcWwgPSBPYmplY3QuYXNzaWduKChzcWxGcmFnbWVudHMsIC4uLnBhcmFtZXRlcnMpID0+IHtcbiAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgcmF3Tm9kZTogUmF3Tm9kZS5jcmVhdGUoc3FsRnJhZ21lbnRzLCBwYXJhbWV0ZXJzPy5tYXAocGFyc2VQYXJhbWV0ZXIpID8/IFtdKSxcbiAgICB9KTtcbn0sIHtcbiAgICByZWYoY29sdW1uUmVmZXJlbmNlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVSYXdCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIHJhd05vZGU6IFJhd05vZGUuY3JlYXRlV2l0aENoaWxkKHBhcnNlU3RyaW5nUmVmZXJlbmNlKGNvbHVtblJlZmVyZW5jZSkpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHZhbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhDaGlsZChwYXJzZVZhbHVlRXhwcmVzc2lvbih2YWx1ZSkpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbCh2YWx1ZSk7XG4gICAgfSxcbiAgICB0YWJsZSh0YWJsZVJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhDaGlsZChwYXJzZVRhYmxlKHRhYmxlUmVmZXJlbmNlKSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgaWQoLi4uaWRzKSB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50cyA9IG5ldyBBcnJheShpZHMubGVuZ3RoICsgMSkuZmlsbCgnLicpO1xuICAgICAgICBmcmFnbWVudHNbMF0gPSAnJztcbiAgICAgICAgZnJhZ21lbnRzW2ZyYWdtZW50cy5sZW5ndGggLSAxXSA9ICcnO1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZShmcmFnbWVudHMsIGlkcy5tYXAoSWRlbnRpZmllck5vZGUuY3JlYXRlKSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgbGl0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVSYXdCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIHJhd05vZGU6IFJhd05vZGUuY3JlYXRlV2l0aENoaWxkKFZhbHVlTm9kZS5jcmVhdGVJbW1lZGlhdGUodmFsdWUpKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBsaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpdCh2YWx1ZSk7XG4gICAgfSxcbiAgICByYXcoc3FsKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVSYXdCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIHJhd05vZGU6IFJhd05vZGUuY3JlYXRlV2l0aFNxbChzcWwpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGpvaW4oYXJyYXksIHNlcGFyYXRvciA9IHNxbCBgLCBgKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gbmV3IEFycmF5KE1hdGgubWF4KDIgKiBhcnJheS5sZW5ndGggLSAxLCAwKSk7XG4gICAgICAgIGNvbnN0IHNlcCA9IHNlcGFyYXRvci50b09wZXJhdGlvbk5vZGUoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgbm9kZXNbMiAqIGldID0gcGFyc2VQYXJhbWV0ZXIoYXJyYXlbaV0pO1xuICAgICAgICAgICAgaWYgKGkgIT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBub2Rlc1syICogaSArIDFdID0gc2VwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVSYXdCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIHJhd05vZGU6IFJhd05vZGUuY3JlYXRlV2l0aENoaWxkcmVuKG5vZGVzKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXIocGFyYW0pIHtcbiAgICBpZiAoaXNPcGVyYXRpb25Ob2RlU291cmNlKHBhcmFtKSkge1xuICAgICAgICByZXR1cm4gcGFyYW0udG9PcGVyYXRpb25Ob2RlKCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZVZhbHVlRXhwcmVzc2lvbihwYXJhbSk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2RlZmF1bHQtcXVlcnktY29tcGlsZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBDcmVhdGVUYWJsZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtdGFibGUtbm9kZS5qcyc7XG5pbXBvcnQgeyBJbnNlcnRRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9pbnNlcnQtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBPcGVyYXRpb25Ob2RlVmlzaXRvciB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXZpc2l0b3IuanMnO1xuaW1wb3J0IHsgT3BlcmF0b3JOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0b3Itbm9kZS5qcyc7XG5pbXBvcnQgeyBQYXJlbnNOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcGFyZW5zLW5vZGUuanMnO1xuaW1wb3J0IHsgUXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBmcmVlemUsIGlzU3RyaW5nLCBpc051bWJlciwgaXNCb29sZWFuLCBpc051bGwsIGlzRGF0ZSwgaXNCaWdJbnQsIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ3JlYXRlVmlld05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtdmlldy1ub2RlLmpzJztcbmltcG9ydCB7IFNldE9wZXJhdGlvbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9zZXQtb3BlcmF0aW9uLW5vZGUuanMnO1xuaW1wb3J0IHsgTWVyZ2VRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9tZXJnZS1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IGxvZ09uY2UgfSBmcm9tICcuLi91dGlsL2xvZy1vbmNlLmpzJztcbmNvbnN0IExJVF9XUkFQX1JFR0VYID0gLycvZztcbmV4cG9ydCBjbGFzcyBEZWZhdWx0UXVlcnlDb21waWxlciBleHRlbmRzIE9wZXJhdGlvbk5vZGVWaXNpdG9yIHtcbiAgICAjc3FsID0gJyc7XG4gICAgI3BhcmFtZXRlcnMgPSBbXTtcbiAgICBnZXQgbnVtUGFyYW1ldGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhcmFtZXRlcnMubGVuZ3RoO1xuICAgIH1cbiAgICBjb21waWxlUXVlcnkobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICB0aGlzLiNzcWwgPSAnJztcbiAgICAgICAgdGhpcy4jcGFyYW1ldGVycyA9IFtdO1xuICAgICAgICB0aGlzLm5vZGVTdGFjay5zcGxpY2UoMCwgdGhpcy5ub2RlU3RhY2subGVuZ3RoKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZSk7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgcXVlcnk6IG5vZGUsXG4gICAgICAgICAgICBxdWVyeUlkLFxuICAgICAgICAgICAgc3FsOiB0aGlzLmdldFNxbCgpLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogWy4uLnRoaXMuI3BhcmFtZXRlcnNdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0U3FsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc3FsO1xuICAgIH1cbiAgICB2aXNpdFNlbGVjdFF1ZXJ5KG5vZGUpIHtcbiAgICAgICAgY29uc3Qgd3JhcEluUGFyZW5zID0gdGhpcy5wYXJlbnROb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICFQYXJlbnNOb2RlLmlzKHRoaXMucGFyZW50Tm9kZSkgJiZcbiAgICAgICAgICAgICFJbnNlcnRRdWVyeU5vZGUuaXModGhpcy5wYXJlbnROb2RlKSAmJlxuICAgICAgICAgICAgIUNyZWF0ZVRhYmxlTm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpICYmXG4gICAgICAgICAgICAhQ3JlYXRlVmlld05vZGUuaXModGhpcy5wYXJlbnROb2RlKSAmJlxuICAgICAgICAgICAgIVNldE9wZXJhdGlvbk5vZGUuaXModGhpcy5wYXJlbnROb2RlKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50Tm9kZSA9PT0gdW5kZWZpbmVkICYmIG5vZGUuZXhwbGFpbikge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHBsYWluKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdyYXBJblBhcmVucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aXRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndpdGgpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnc2VsZWN0Jyk7XG4gICAgICAgIGlmIChub2RlLmRpc3RpbmN0T24pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVEaXN0aW5jdE9uKG5vZGUuZGlzdGluY3RPbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZnJvbnRNb2RpZmllcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5mcm9udE1vZGlmaWVycywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS50b3ApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRvcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuc2VsZWN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5zZWxlY3Rpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5mcm9tKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5mcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5qb2lucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5qb2lucywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aGVyZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2hlcmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmdyb3VwQnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmdyb3VwQnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmhhdmluZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuaGF2aW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5zZXRPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnNldE9wZXJhdGlvbnMsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3JkZXJCeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3JkZXJCeSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubGltaXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmxpbWl0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vZmZzZXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZmV0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmZldGNoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5lbmRNb2RpZmllcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3QodGhpcy5zb3J0U2VsZWN0TW9kaWZpZXJzKFsuLi5ub2RlLmVuZE1vZGlmaWVyc10pLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3cmFwSW5QYXJlbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRGcm9tKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Zyb20gJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5mcm9tcyk7XG4gICAgfVxuICAgIHZpc2l0U2VsZWN0aW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5zZWxlY3Rpb24pO1xuICAgIH1cbiAgICB2aXNpdENvbHVtbihub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICB9XG4gICAgY29tcGlsZURpc3RpbmN0T24oZXhwcmVzc2lvbnMpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Rpc3RpbmN0IG9uICgnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChleHByZXNzaW9ucyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgfVxuICAgIGNvbXBpbGVMaXN0KG5vZGVzLCBzZXBhcmF0b3IgPSAnLCAnKSB7XG4gICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IG5vZGVzLmxlbmd0aCAtIDE7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGxhc3RJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2Rlc1tpXSk7XG4gICAgICAgICAgICBpZiAoaSA8IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKHNlcGFyYXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRXaGVyZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCd3aGVyZSAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aGVyZSk7XG4gICAgfVxuICAgIHZpc2l0SGF2aW5nKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2hhdmluZyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5oYXZpbmcpO1xuICAgIH1cbiAgICB2aXNpdEluc2VydFF1ZXJ5KG5vZGUpIHtcbiAgICAgICAgY29uc3Qgcm9vdFF1ZXJ5Tm9kZSA9IHRoaXMubm9kZVN0YWNrLmZpbmQoUXVlcnlOb2RlLmlzKTtcbiAgICAgICAgY29uc3QgaXNTdWJRdWVyeSA9IHJvb3RRdWVyeU5vZGUgIT09IG5vZGU7XG4gICAgICAgIGlmICghaXNTdWJRdWVyeSAmJiBub2RlLmV4cGxhaW4pIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwbGFpbik7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N1YlF1ZXJ5ICYmICFNZXJnZVF1ZXJ5Tm9kZS5pcyhyb290UXVlcnlOb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aXRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndpdGgpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZChub2RlLnJlcGxhY2UgPyAncmVwbGFjZScgOiAnaW5zZXJ0Jyk7XG4gICAgICAgIC8vIFRPRE86IHJlbW92ZSBpbiAwLjI5LlxuICAgICAgICBpZiAobm9kZS5pZ25vcmUpIHtcbiAgICAgICAgICAgIGxvZ09uY2UoJ2BJbnNlcnRRdWVyeU5vZGUuaWdub3JlYCBpcyBkZXByZWNhdGVkLiBVc2UgYEluc2VydFF1ZXJ5Tm9kZS5vckFjdGlvbmAgaW5zdGVhZC4nKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgaWdub3JlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3JBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9yQWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS50b3ApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRvcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuaW50bykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBpbnRvICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5pbnRvKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICgnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3V0cHV0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vdXRwdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kZWZhdWx0VmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2RlZmF1bHQgdmFsdWVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub25Db25mbGljdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub25Db25mbGljdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub25EdXBsaWNhdGVLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9uRHVwbGljYXRlS2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5yZXR1cm5pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJldHVybmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3ViUXVlcnkgJiYgIU1lcmdlUXVlcnlOb2RlLmlzKHJvb3RRdWVyeU5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmVuZE1vZGlmaWVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmVuZE1vZGlmaWVycywgJyAnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFZhbHVlcyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCd2YWx1ZXMgJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS52YWx1ZXMpO1xuICAgIH1cbiAgICB2aXNpdERlbGV0ZVF1ZXJ5KG5vZGUpIHtcbiAgICAgICAgY29uc3QgaXNTdWJRdWVyeSA9IHRoaXMubm9kZVN0YWNrLmZpbmQoUXVlcnlOb2RlLmlzKSAhPT0gbm9kZTtcbiAgICAgICAgaWYgKCFpc1N1YlF1ZXJ5ICYmIG5vZGUuZXhwbGFpbikge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHBsYWluKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3ViUXVlcnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2l0aCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aXRoKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ2RlbGV0ZSAnKTtcbiAgICAgICAgaWYgKG5vZGUudG9wKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRvcCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZnJvbSk7XG4gICAgICAgIGlmIChub2RlLm91dHB1dCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3V0cHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS51c2luZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudXNpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmpvaW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmpvaW5zLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndoZXJlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aGVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3JkZXJCeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3JkZXJCeSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubGltaXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmxpbWl0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5yZXR1cm5pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJldHVybmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3ViUXVlcnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0UmV0dXJuaW5nKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3JldHVybmluZyAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnNlbGVjdGlvbnMpO1xuICAgIH1cbiAgICB2aXNpdEFsaWFzKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5ub2RlKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyBhcyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5hbGlhcyk7XG4gICAgfVxuICAgIHZpc2l0UmVmZXJlbmNlKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJy4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgfVxuICAgIHZpc2l0U2VsZWN0QWxsKF8pIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyonKTtcbiAgICB9XG4gICAgdmlzaXRJZGVudGlmaWVyKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRMZWZ0SWRlbnRpZmllcldyYXBwZXIoKSk7XG4gICAgICAgIHRoaXMuY29tcGlsZVVud3JhcHBlZElkZW50aWZpZXIobm9kZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuZ2V0UmlnaHRJZGVudGlmaWVyV3JhcHBlcigpKTtcbiAgICB9XG4gICAgY29tcGlsZVVud3JhcHBlZElkZW50aWZpZXIobm9kZSkge1xuICAgICAgICBpZiAoIWlzU3RyaW5nKG5vZGUubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYSBub24tc3RyaW5nIGlkZW50aWZpZXIgd2FzIHBhc3NlZCB0byBjb21waWxlVW53cmFwcGVkSWRlbnRpZmllci4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLnNhbml0aXplSWRlbnRpZmllcihub2RlLm5hbWUpKTtcbiAgICB9XG4gICAgdmlzaXRBbmQobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmxlZnQpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIGFuZCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yaWdodCk7XG4gICAgfVxuICAgIHZpc2l0T3Iobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmxlZnQpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIG9yICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJpZ2h0KTtcbiAgICB9XG4gICAgdmlzaXRWYWx1ZShub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmltbWVkaWF0ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRJbW1lZGlhdGVWYWx1ZShub2RlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kVmFsdWUobm9kZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRWYWx1ZUxpc3Qobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUudmFsdWVzKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgdmlzaXRUdXBsZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS52YWx1ZXMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdFByaW1pdGl2ZVZhbHVlTGlzdChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIGNvbnN0IHsgdmFsdWVzIH0gPSBub2RlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRWYWx1ZSh2YWx1ZXNbaV0pO1xuICAgICAgICAgICAgaWYgKGkgIT09IHZhbHVlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJywgJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgdmlzaXRQYXJlbnMobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5vZGUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdEpvaW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChKT0lOX1RZUEVfU1FMW25vZGUuam9pblR5cGVdKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIGlmIChub2RlLm9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRPbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdvbiAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vbik7XG4gICAgfVxuICAgIHZpc2l0UmF3KG5vZGUpIHtcbiAgICAgICAgY29uc3QgeyBzcWxGcmFnbWVudHMsIHBhcmFtZXRlcnM6IHBhcmFtcyB9ID0gbm9kZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcWxGcmFnbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKHNxbEZyYWdtZW50c1tpXSk7XG4gICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShwYXJhbXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0T3BlcmF0b3Iobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChub2RlLm9wZXJhdG9yKTtcbiAgICB9XG4gICAgdmlzaXRUYWJsZShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgIH1cbiAgICB2aXNpdFNjaGVtYWJsZUlkZW50aWZpZXIobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5zY2hlbWEpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuc2NoZW1hKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5pZGVudGlmaWVyKTtcbiAgICB9XG4gICAgdmlzaXRDcmVhdGVUYWJsZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjcmVhdGUgJyk7XG4gICAgICAgIGlmIChub2RlLmZyb250TW9kaWZpZXJzICYmIG5vZGUuZnJvbnRNb2RpZmllcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmZyb250TW9kaWZpZXJzLCAnICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS50ZW1wb3JhcnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCd0ZW1wb3JhcnkgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ3RhYmxlICcpO1xuICAgICAgICBpZiAobm9kZS5pZk5vdEV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIG5vdCBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIGlmIChub2RlLnNlbGVjdFF1ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGFzICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5zZWxlY3RRdWVyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICgnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3QoWy4uLm5vZGUuY29sdW1ucywgLi4uKG5vZGUuY29uc3RyYWludHMgPz8gW10pXSk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICAgICAgaWYgKG5vZGUub25Db21taXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uIGNvbW1pdCAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZChub2RlLm9uQ29tbWl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLmVuZE1vZGlmaWVycyAmJiBub2RlLmVuZE1vZGlmaWVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCAnICcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0Q29sdW1uRGVmaW5pdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmlmTm90RXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgbm90IGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGF0YVR5cGUpO1xuICAgICAgICBpZiAobm9kZS51bnNpZ25lZCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB1bnNpZ25lZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmZyb250TW9kaWZpZXJzICYmIG5vZGUuZnJvbnRNb2RpZmllcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5mcm9udE1vZGlmaWVycywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5nZW5lcmF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmdlbmVyYXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuaWRlbnRpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgaWRlbnRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kZWZhdWx0VG8pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRlZmF1bHRUbyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubm90TnVsbCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBub3QgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnVuaXF1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB1bmlxdWUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5udWxsc05vdERpc3RpbmN0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG51bGxzIG5vdCBkaXN0aW5jdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgcHJpbWFyeSBrZXknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5hdXRvSW5jcmVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRBdXRvSW5jcmVtZW50KCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJlZmVyZW5jZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNoZWNrKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzICYmIG5vZGUuZW5kTW9kaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldEF1dG9JbmNyZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiAnYXV0b19pbmNyZW1lbnQnO1xuICAgIH1cbiAgICB2aXNpdFJlZmVyZW5jZXMobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgncmVmZXJlbmNlcyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIGlmIChub2RlLm9uRGVsZXRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uIGRlbGV0ZSAnKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5vZGUub25EZWxldGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9uVXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uIHVwZGF0ZSAnKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5vZGUub25VcGRhdGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RHJvcFRhYmxlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3AgdGFibGUgJyk7XG4gICAgICAgIGlmIChub2RlLmlmRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICBpZiAobm9kZS5jYXNjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGNhc2NhZGUnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdERhdGFUeXBlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5kYXRhVHlwZSk7XG4gICAgfVxuICAgIHZpc2l0T3JkZXJCeShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdvcmRlciBieSAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLml0ZW1zKTtcbiAgICB9XG4gICAgdmlzaXRPcmRlckJ5SXRlbShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3JkZXJCeSk7XG4gICAgICAgIGlmIChub2RlLmNvbGxhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sbGF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRpcmVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubnVsbHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgbnVsbHMgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZChub2RlLm51bGxzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdEdyb3VwQnkobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZ3JvdXAgYnkgJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5pdGVtcyk7XG4gICAgfVxuICAgIHZpc2l0R3JvdXBCeUl0ZW0obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmdyb3VwQnkpO1xuICAgIH1cbiAgICB2aXNpdFVwZGF0ZVF1ZXJ5KG5vZGUpIHtcbiAgICAgICAgY29uc3Qgcm9vdFF1ZXJ5Tm9kZSA9IHRoaXMubm9kZVN0YWNrLmZpbmQoUXVlcnlOb2RlLmlzKTtcbiAgICAgICAgY29uc3QgaXNTdWJRdWVyeSA9IHJvb3RRdWVyeU5vZGUgIT09IG5vZGU7XG4gICAgICAgIGlmICghaXNTdWJRdWVyeSAmJiBub2RlLmV4cGxhaW4pIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwbGFpbik7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N1YlF1ZXJ5ICYmICFNZXJnZVF1ZXJ5Tm9kZS5pcyhyb290UXVlcnlOb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aXRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndpdGgpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgndXBkYXRlICcpO1xuICAgICAgICBpZiAobm9kZS50b3ApIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudG9wKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnc2V0ICcpO1xuICAgICAgICBpZiAobm9kZS51cGRhdGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUudXBkYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3V0cHV0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vdXRwdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmZyb20pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmpvaW5zKSB7XG4gICAgICAgICAgICBpZiAoIW5vZGUuZnJvbSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkpvaW5zIGluIGFuIHVwZGF0ZSBxdWVyeSBhcmUgb25seSBzdXBwb3J0ZWQgYXMgYSBwYXJ0IG9mIGEgUG9zdGdyZVNRTCAndXBkYXRlIHNldCBmcm9tIGpvaW4nIHF1ZXJ5LiBJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBNeVNRTCAndXBkYXRlIGpvaW4gc2V0JyBxdWVyeSwgc2VlIGh0dHBzOi8va3lzZWx5LmRldi9kb2NzL2V4YW1wbGVzL3VwZGF0ZS9teS1zcWwtam9pbnNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmpvaW5zLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndoZXJlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aGVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3JkZXJCeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3JkZXJCeSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubGltaXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmxpbWl0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5yZXR1cm5pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJldHVybmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3ViUXVlcnkgJiYgIU1lcmdlUXVlcnlOb2RlLmlzKHJvb3RRdWVyeU5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmVuZE1vZGlmaWVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmVuZE1vZGlmaWVycywgJyAnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdENvbHVtblVwZGF0ZShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyA9ICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnZhbHVlKTtcbiAgICB9XG4gICAgdmlzaXRMaW1pdChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdsaW1pdCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5saW1pdCk7XG4gICAgfVxuICAgIHZpc2l0T2Zmc2V0KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ29mZnNldCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vZmZzZXQpO1xuICAgIH1cbiAgICB2aXNpdE9uQ29uZmxpY3Qobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnb24gY29uZmxpY3QnKTtcbiAgICAgICAgaWYgKG5vZGUuY29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAoJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vZGUuY29uc3RyYWludCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBvbiBjb25zdHJhaW50ICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb25zdHJhaW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlLmluZGV4RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAoJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmluZGV4RXhwcmVzc2lvbik7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmluZGV4V2hlcmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmluZGV4V2hlcmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRvTm90aGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBkbyBub3RoaW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9kZS51cGRhdGVzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGRvIHVwZGF0ZSBzZXQgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUudXBkYXRlcyk7XG4gICAgICAgICAgICBpZiAobm9kZS51cGRhdGVXaGVyZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS51cGRhdGVXaGVyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRPbkR1cGxpY2F0ZUtleShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdvbiBkdXBsaWNhdGUga2V5IHVwZGF0ZSAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnVwZGF0ZXMpO1xuICAgIH1cbiAgICB2aXNpdENyZWF0ZUluZGV4KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2NyZWF0ZSAnKTtcbiAgICAgICAgaWYgKG5vZGUudW5pcXVlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgndW5pcXVlICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdpbmRleCAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZOb3RFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBub3QgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIGlmIChub2RlLnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudXNpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgdXNpbmcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnVzaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICgnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubnVsbHNOb3REaXN0aW5jdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBudWxscyBub3QgZGlzdGluY3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aGVyZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2hlcmUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RHJvcEluZGV4KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3AgaW5kZXggJyk7XG4gICAgICAgIGlmIChub2RlLmlmRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIGlmIChub2RlLnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuY2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBjYXNjYWRlJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRDcmVhdGVTY2hlbWEobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnY3JlYXRlIHNjaGVtYSAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZOb3RFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBub3QgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuc2NoZW1hKTtcbiAgICB9XG4gICAgdmlzaXREcm9wU2NoZW1hKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3Agc2NoZW1hICcpO1xuICAgICAgICBpZiAobm9kZS5pZkV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnNjaGVtYSk7XG4gICAgICAgIGlmIChub2RlLmNhc2NhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgY2FzY2FkZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0UHJpbWFyeUtleUNvbnN0cmFpbnQobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnY29uc3RyYWludCAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdwcmltYXJ5IGtleSAoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgdGhpcy5idWlsZERlZmVycmFibGUobm9kZSk7XG4gICAgfVxuICAgIGJ1aWxkRGVmZXJyYWJsZShub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmRlZmVycmFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKG5vZGUuZGVmZXJyYWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgZGVmZXJyYWJsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBub3QgZGVmZXJyYWJsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmluaXRpYWxseURlZmVycmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChub2RlLmluaXRpYWxseURlZmVycmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBpbml0aWFsbHkgZGVmZXJyZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgaW5pdGlhbGx5IGltbWVkaWF0ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0VW5pcXVlQ29uc3RyYWludChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdjb25zdHJhaW50ICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ3VuaXF1ZScpO1xuICAgICAgICBpZiAobm9kZS5udWxsc05vdERpc3RpbmN0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG51bGxzIG5vdCBkaXN0aW5jdCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIHRoaXMuYnVpbGREZWZlcnJhYmxlKG5vZGUpO1xuICAgIH1cbiAgICB2aXNpdENoZWNrQ29uc3RyYWludChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdjb25zdHJhaW50ICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ2NoZWNrICgnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgdmlzaXRGb3JlaWduS2V5Q29uc3RyYWludChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdjb25zdHJhaW50ICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ2ZvcmVpZ24ga2V5ICgnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKSAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZWZlcmVuY2VzKTtcbiAgICAgICAgaWYgKG5vZGUub25EZWxldGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gZGVsZXRlICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5vbkRlbGV0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub25VcGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gdXBkYXRlICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5vblVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWlsZERlZmVycmFibGUobm9kZSk7XG4gICAgfVxuICAgIHZpc2l0TGlzdChub2RlKSB7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5pdGVtcyk7XG4gICAgfVxuICAgIHZpc2l0V2l0aChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCd3aXRoICcpO1xuICAgICAgICBpZiAobm9kZS5yZWN1cnNpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdyZWN1cnNpdmUgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmV4cHJlc3Npb25zKTtcbiAgICB9XG4gICAgdmlzaXRDb21tb25UYWJsZUV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIGFzICcpO1xuICAgICAgICBpZiAoaXNCb29sZWFuKG5vZGUubWF0ZXJpYWxpemVkKSkge1xuICAgICAgICAgICAgaWYgKCFub2RlLm1hdGVyaWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdub3QgJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnbWF0ZXJpYWxpemVkICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHZpc2l0Q29tbW9uVGFibGVFeHByZXNzaW9uTmFtZShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICBpZiAobm9kZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdEFsdGVyVGFibGUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnYWx0ZXIgdGFibGUgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICBpZiAobm9kZS5yZW5hbWVUbykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3JlbmFtZSB0byAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmVuYW1lVG8pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnNldFNjaGVtYSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3NldCBzY2hlbWEgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnNldFNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYWRkQ29uc3RyYWludCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5hZGRDb25zdHJhaW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kcm9wQ29uc3RyYWludCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5kcm9wQ29uc3RyYWludCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucmVuYW1lQ29uc3RyYWludCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZW5hbWVDb25zdHJhaW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5jb2x1bW5BbHRlcmF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5jb21waWxlQ29sdW1uQWx0ZXJhdGlvbnMobm9kZS5jb2x1bW5BbHRlcmF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYWRkSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuYWRkSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRyb3BJbmRleCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5kcm9wSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0QWRkQ29sdW1uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2FkZCBjb2x1bW4gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICB9XG4gICAgdmlzaXRSZW5hbWVDb2x1bW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgncmVuYW1lIGNvbHVtbiAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2x1bW4pO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIHRvICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJlbmFtZVRvKTtcbiAgICB9XG4gICAgdmlzaXREcm9wQ29sdW1uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3AgY29sdW1uICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgfVxuICAgIHZpc2l0QWx0ZXJDb2x1bW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnYWx0ZXIgY29sdW1uICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIGlmIChub2RlLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbm5vdW5jZXNOZXdDb2x1bW5EYXRhVHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3R5cGUgJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRhdGFUeXBlKTtcbiAgICAgICAgICAgIGlmIChub2RlLmRhdGFUeXBlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCd1c2luZyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRhdGFUeXBlRXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuc2V0RGVmYXVsdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3NldCBkZWZhdWx0ICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5zZXREZWZhdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kcm9wRGVmYXVsdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3AgZGVmYXVsdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnNldE5vdE51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdzZXQgbm90IG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kcm9wTm90TnVsbCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3Agbm90IG51bGwnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE1vZGlmeUNvbHVtbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdtb2RpZnkgY29sdW1uICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgfVxuICAgIHZpc2l0QWRkQ29uc3RyYWludChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdhZGQgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29uc3RyYWludCk7XG4gICAgfVxuICAgIHZpc2l0RHJvcENvbnN0cmFpbnQobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCBjb25zdHJhaW50ICcpO1xuICAgICAgICBpZiAobm9kZS5pZkV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbnN0cmFpbnROYW1lKTtcbiAgICAgICAgaWYgKG5vZGUubW9kaWZpZXIgPT09ICdjYXNjYWRlJykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBjYXNjYWRlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9kZS5tb2RpZmllciA9PT0gJ3Jlc3RyaWN0Jykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyByZXN0cmljdCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0UmVuYW1lQ29uc3RyYWludChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdyZW5hbWUgY29uc3RyYWludCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vbGROYW1lKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyB0byAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uZXdOYW1lKTtcbiAgICB9XG4gICAgdmlzaXRTZXRPcGVyYXRpb24obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChub2RlLm9wZXJhdG9yKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgaWYgKG5vZGUuYWxsKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnYWxsICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHZpc2l0Q3JlYXRlVmlldyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjcmVhdGUgJyk7XG4gICAgICAgIGlmIChub2RlLm9yUmVwbGFjZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ29yIHJlcGxhY2UgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubWF0ZXJpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnbWF0ZXJpYWxpemVkICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnRlbXBvcmFyeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3RlbXBvcmFyeSAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgndmlldyAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZOb3RFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBub3QgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIGlmIChub2RlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKSAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5hcykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2FzICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5hcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRSZWZyZXNoTWF0ZXJpYWxpemVkVmlldyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdyZWZyZXNoIG1hdGVyaWFsaXplZCB2aWV3ICcpO1xuICAgICAgICBpZiAobm9kZS5jb25jdXJyZW50bHkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdjb25jdXJyZW50bHkgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgaWYgKG5vZGUud2l0aE5vRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB3aXRoIG5vIGRhdGEnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgd2l0aCBkYXRhJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXREcm9wVmlldyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkcm9wICcpO1xuICAgICAgICBpZiAobm9kZS5tYXRlcmlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdtYXRlcmlhbGl6ZWQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ3ZpZXcgJyk7XG4gICAgICAgIGlmIChub2RlLmlmRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIGlmIChub2RlLmNhc2NhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgY2FzY2FkZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0R2VuZXJhdGVkKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2dlbmVyYXRlZCAnKTtcbiAgICAgICAgaWYgKG5vZGUuYWx3YXlzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnYWx3YXlzICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmJ5RGVmYXVsdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2J5IGRlZmF1bHQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ2FzICcpO1xuICAgICAgICBpZiAobm9kZS5pZGVudGl0eSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lkZW50aXR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnN0b3JlZCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBzdG9yZWQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdERlZmF1bHRWYWx1ZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkZWZhdWx0ICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIHZpc2l0U2VsZWN0TW9kaWZpZXIobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5yYXdNb2RpZmllcikge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yYXdNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZChTRUxFQ1RfTU9ESUZJRVJfU1FMW25vZGUubW9kaWZpZXJdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vZikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBvZiAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5vZiwgJywgJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRDcmVhdGVUeXBlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2NyZWF0ZSB0eXBlICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICBpZiAobm9kZS5lbnVtKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGFzIGVudW0gJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmVudW0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RHJvcFR5cGUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCB0eXBlICcpO1xuICAgICAgICBpZiAobm9kZS5pZkV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgIH1cbiAgICB2aXNpdEV4cGxhaW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZXhwbGFpbicpO1xuICAgICAgICBpZiAobm9kZS5vcHRpb25zIHx8IG5vZGUuZm9ybWF0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRMZWZ0RXhwbGFpbk9wdGlvbnNXcmFwcGVyKCkpO1xuICAgICAgICAgICAgaWYgKG5vZGUub3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuZ2V0RXhwbGFpbk9wdGlvbnNEZWxpbWl0ZXIoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUuZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2Zvcm1hdCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuZ2V0RXhwbGFpbk9wdGlvbkFzc2lnbm1lbnQoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5mb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRSaWdodEV4cGxhaW5PcHRpb25zV3JhcHBlcigpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdERlZmF1bHRJbnNlcnRWYWx1ZShfKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkZWZhdWx0Jyk7XG4gICAgfVxuICAgIHZpc2l0QWdncmVnYXRlRnVuY3Rpb24obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChub2RlLmZ1bmMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICBpZiAobm9kZS5kaXN0aW5jdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2Rpc3RpbmN0ICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5hZ2dyZWdhdGVkKTtcbiAgICAgICAgaWYgKG5vZGUub3JkZXJCeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3JkZXJCeSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgaWYgKG5vZGUud2l0aGluR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgd2l0aGluIGdyb3VwICgnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2l0aGluR3JvdXApO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgZmlsdGVyKCcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5maWx0ZXIpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vdmVyKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vdmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE92ZXIobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnb3ZlcignKTtcbiAgICAgICAgaWYgKG5vZGUucGFydGl0aW9uQnkpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucGFydGl0aW9uQnkpO1xuICAgICAgICAgICAgaWYgKG5vZGUub3JkZXJCeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3JkZXJCeSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcmRlckJ5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdFBhcnRpdGlvbkJ5KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3BhcnRpdGlvbiBieSAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLml0ZW1zKTtcbiAgICB9XG4gICAgdmlzaXRQYXJ0aXRpb25CeUl0ZW0obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnBhcnRpdGlvbkJ5KTtcbiAgICB9XG4gICAgdmlzaXRCaW5hcnlPcGVyYXRpb24obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmxlZnRPcGVyYW5kKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcGVyYXRvcik7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmlnaHRPcGVyYW5kKTtcbiAgICB9XG4gICAgdmlzaXRVbmFyeU9wZXJhdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3BlcmF0b3IpO1xuICAgICAgICBpZiAoIXRoaXMuaXNNaW51c09wZXJhdG9yKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3BlcmFuZCk7XG4gICAgfVxuICAgIGlzTWludXNPcGVyYXRvcihub2RlKSB7XG4gICAgICAgIHJldHVybiBPcGVyYXRvck5vZGUuaXMobm9kZSkgJiYgbm9kZS5vcGVyYXRvciA9PT0gJy0nO1xuICAgIH1cbiAgICB2aXNpdFVzaW5nKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3VzaW5nICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUudGFibGVzKTtcbiAgICB9XG4gICAgdmlzaXRGdW5jdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUuZnVuYyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdENhc2Uobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnY2FzZScpO1xuICAgICAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndoZW4pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUud2hlbiwgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5lbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGVsc2UgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmVsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgZW5kJyk7XG4gICAgICAgIGlmIChub2RlLmlzU3RhdGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGNhc2UnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFdoZW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnd2hlbiAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb25kaXRpb24pO1xuICAgICAgICBpZiAobm9kZS5yZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgdGhlbiAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdEpTT05SZWZlcmVuY2Uobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJlZmVyZW5jZSk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudHJhdmVyc2FsKTtcbiAgICB9XG4gICAgdmlzaXRKU09OUGF0aChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmluT3BlcmF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuaW5PcGVyYXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoXCInJFwiKTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoTGVnIG9mIG5vZGUucGF0aExlZ3MpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKHBhdGhMZWcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKFwiJ1wiKTtcbiAgICB9XG4gICAgdmlzaXRKU09OUGF0aExlZyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGlzQXJyYXlMb2NhdGlvbiA9IG5vZGUudHlwZSA9PT0gJ0FycmF5TG9jYXRpb24nO1xuICAgICAgICB0aGlzLmFwcGVuZChpc0FycmF5TG9jYXRpb24gPyAnWycgOiAnLicpO1xuICAgICAgICB0aGlzLmFwcGVuZChTdHJpbmcobm9kZS52YWx1ZSkpO1xuICAgICAgICBpZiAoaXNBcnJheUxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnXScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0SlNPTk9wZXJhdG9yQ2hhaW4obm9kZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gbm9kZS52YWx1ZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID09PSBsZW4gLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcGVyYXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnLT4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudmFsdWVzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE1lcmdlUXVlcnkobm9kZSkge1xuICAgICAgICBpZiAobm9kZS53aXRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndpdGgpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnbWVyZ2UgJyk7XG4gICAgICAgIGlmIChub2RlLnRvcCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50b3ApO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnaW50byAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5pbnRvKTtcbiAgICAgICAgaWYgKG5vZGUudXNpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnVzaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aGVucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS53aGVucywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5yZXR1cm5pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJldHVybmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3V0cHV0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vdXRwdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmVuZE1vZGlmaWVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmVuZE1vZGlmaWVycywgJyAnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE1hdGNoZWQobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5ub3QpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdub3QgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ21hdGNoZWQnKTtcbiAgICAgICAgaWYgKG5vZGUuYnlTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgYnkgc291cmNlJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRBZGRJbmRleChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdhZGQgJyk7XG4gICAgICAgIGlmIChub2RlLnVuaXF1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3VuaXF1ZSAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnaW5kZXggJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIGlmIChub2RlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS51c2luZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB1c2luZyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudXNpbmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0Q2FzdChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjYXN0KCcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIGFzICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRhdGFUeXBlKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgdmlzaXRGZXRjaChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdmZXRjaCBuZXh0ICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJvd0NvdW50KTtcbiAgICAgICAgdGhpcy5hcHBlbmQoYCByb3dzICR7bm9kZS5tb2RpZmllcn1gKTtcbiAgICB9XG4gICAgdmlzaXRPdXRwdXQobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnb3V0cHV0ICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuc2VsZWN0aW9ucyk7XG4gICAgfVxuICAgIHZpc2l0VG9wKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoYHRvcCgke25vZGUuZXhwcmVzc2lvbn0pYCk7XG4gICAgICAgIGlmIChub2RlLm1vZGlmaWVycykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoYCAke25vZGUubW9kaWZpZXJzfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0T3JBY3Rpb24obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChub2RlLmFjdGlvbik7XG4gICAgfVxuICAgIHZpc2l0Q29sbGF0ZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjb2xsYXRlICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbGxhdGlvbik7XG4gICAgfVxuICAgIGFwcGVuZChzdHIpIHtcbiAgICAgICAgdGhpcy4jc3FsICs9IHN0cjtcbiAgICB9XG4gICAgYXBwZW5kVmFsdWUocGFyYW1ldGVyKSB7XG4gICAgICAgIHRoaXMuYWRkUGFyYW1ldGVyKHBhcmFtZXRlcik7XG4gICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuZ2V0Q3VycmVudFBhcmFtZXRlclBsYWNlaG9sZGVyKCkpO1xuICAgIH1cbiAgICBnZXRMZWZ0SWRlbnRpZmllcldyYXBwZXIoKSB7XG4gICAgICAgIHJldHVybiAnXCInO1xuICAgIH1cbiAgICBnZXRSaWdodElkZW50aWZpZXJXcmFwcGVyKCkge1xuICAgICAgICByZXR1cm4gJ1wiJztcbiAgICB9XG4gICAgZ2V0Q3VycmVudFBhcmFtZXRlclBsYWNlaG9sZGVyKCkge1xuICAgICAgICByZXR1cm4gJyQnICsgdGhpcy5udW1QYXJhbWV0ZXJzO1xuICAgIH1cbiAgICBnZXRMZWZ0RXhwbGFpbk9wdGlvbnNXcmFwcGVyKCkge1xuICAgICAgICByZXR1cm4gJygnO1xuICAgIH1cbiAgICBnZXRFeHBsYWluT3B0aW9uQXNzaWdubWVudCgpIHtcbiAgICAgICAgcmV0dXJuICcgJztcbiAgICB9XG4gICAgZ2V0RXhwbGFpbk9wdGlvbnNEZWxpbWl0ZXIoKSB7XG4gICAgICAgIHJldHVybiAnLCAnO1xuICAgIH1cbiAgICBnZXRSaWdodEV4cGxhaW5PcHRpb25zV3JhcHBlcigpIHtcbiAgICAgICAgcmV0dXJuICcpJztcbiAgICB9XG4gICAgc2FuaXRpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgICAgICAgY29uc3QgbGVmdFdyYXAgPSB0aGlzLmdldExlZnRJZGVudGlmaWVyV3JhcHBlcigpO1xuICAgICAgICBjb25zdCByaWdodFdyYXAgPSB0aGlzLmdldFJpZ2h0SWRlbnRpZmllcldyYXBwZXIoKTtcbiAgICAgICAgbGV0IHNhbml0aXplZCA9ICcnO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgaWRlbnRpZmllcikge1xuICAgICAgICAgICAgc2FuaXRpemVkICs9IGM7XG4gICAgICAgICAgICBpZiAoYyA9PT0gbGVmdFdyYXApIHtcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWQgKz0gbGVmdFdyYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSByaWdodFdyYXApIHtcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWQgKz0gcmlnaHRXcmFwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gICAgfVxuICAgIHNhbml0aXplU3RyaW5nTGl0ZXJhbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShMSVRfV1JBUF9SRUdFWCwgXCInJ1wiKTtcbiAgICB9XG4gICAgYWRkUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgICAgICB0aGlzLiNwYXJhbWV0ZXJzLnB1c2gocGFyYW1ldGVyKTtcbiAgICB9XG4gICAgYXBwZW5kSW1tZWRpYXRlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRTdHJpbmdMaXRlcmFsKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc051bWJlcih2YWx1ZSkgfHwgaXNCb29sZWFuKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNOdWxsKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ251bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZEltbWVkaWF0ZVZhbHVlKHZhbHVlLnRvSVNPU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQmlnSW50KHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRJbW1lZGlhdGVWYWx1ZSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBpbW1lZGlhdGUgdmFsdWUgJHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhcHBlbmRTdHJpbmdMaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKFwiJ1wiKTtcbiAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5zYW5pdGl6ZVN0cmluZ0xpdGVyYWwodmFsdWUpKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoXCInXCIpO1xuICAgIH1cbiAgICBzb3J0U2VsZWN0TW9kaWZpZXJzKGFycikge1xuICAgICAgICBhcnIuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQubW9kaWZpZXIgJiYgcmlnaHQubW9kaWZpZXJcbiAgICAgICAgICAgID8gU0VMRUNUX01PRElGSUVSX1BSSU9SSVRZW2xlZnQubW9kaWZpZXJdIC1cbiAgICAgICAgICAgICAgICBTRUxFQ1RfTU9ESUZJRVJfUFJJT1JJVFlbcmlnaHQubW9kaWZpZXJdXG4gICAgICAgICAgICA6IDEpO1xuICAgICAgICByZXR1cm4gZnJlZXplKGFycik7XG4gICAgfVxuICAgIGNvbXBpbGVDb2x1bW5BbHRlcmF0aW9ucyhjb2x1bW5BbHRlcmF0aW9ucykge1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KGNvbHVtbkFsdGVyYXRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY29udHJvbHMgd2hldGhlciB0aGUgZGlhbGVjdCBhZGRzIGEgXCJ0eXBlXCIga2V5d29yZCBiZWZvcmUgYSBjb2x1bW4ncyBuZXcgZGF0YVxuICAgICAqIHR5cGUgaW4gYW4gQUxURVIgVEFCTEUgc3RhdGVtZW50LlxuICAgICAqL1xuICAgIGFubm91bmNlc05ld0NvbHVtbkRhdGFUeXBlKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5jb25zdCBTRUxFQ1RfTU9ESUZJRVJfU1FMID0gZnJlZXplKHtcbiAgICBGb3JLZXlTaGFyZTogJ2ZvciBrZXkgc2hhcmUnLFxuICAgIEZvck5vS2V5VXBkYXRlOiAnZm9yIG5vIGtleSB1cGRhdGUnLFxuICAgIEZvclVwZGF0ZTogJ2ZvciB1cGRhdGUnLFxuICAgIEZvclNoYXJlOiAnZm9yIHNoYXJlJyxcbiAgICBOb1dhaXQ6ICdub3dhaXQnLFxuICAgIFNraXBMb2NrZWQ6ICdza2lwIGxvY2tlZCcsXG4gICAgRGlzdGluY3Q6ICdkaXN0aW5jdCcsXG59KTtcbmNvbnN0IFNFTEVDVF9NT0RJRklFUl9QUklPUklUWSA9IGZyZWV6ZSh7XG4gICAgRm9yS2V5U2hhcmU6IDEsXG4gICAgRm9yTm9LZXlVcGRhdGU6IDEsXG4gICAgRm9yVXBkYXRlOiAxLFxuICAgIEZvclNoYXJlOiAxLFxuICAgIE5vV2FpdDogMixcbiAgICBTa2lwTG9ja2VkOiAyLFxuICAgIERpc3RpbmN0OiAwLFxufSk7XG5jb25zdCBKT0lOX1RZUEVfU1FMID0gZnJlZXplKHtcbiAgICBJbm5lckpvaW46ICdpbm5lciBqb2luJyxcbiAgICBMZWZ0Sm9pbjogJ2xlZnQgam9pbicsXG4gICAgUmlnaHRKb2luOiAncmlnaHQgam9pbicsXG4gICAgRnVsbEpvaW46ICdmdWxsIGpvaW4nLFxuICAgIENyb3NzSm9pbjogJ2Nyb3NzIGpvaW4nLFxuICAgIExhdGVyYWxJbm5lckpvaW46ICdpbm5lciBqb2luIGxhdGVyYWwnLFxuICAgIExhdGVyYWxMZWZ0Sm9pbjogJ2xlZnQgam9pbiBsYXRlcmFsJyxcbiAgICBMYXRlcmFsQ3Jvc3NKb2luOiAnY3Jvc3Mgam9pbiBsYXRlcmFsJyxcbiAgICBPdXRlckFwcGx5OiAnb3V0ZXIgYXBwbHknLFxuICAgIENyb3NzQXBwbHk6ICdjcm9zcyBhcHBseScsXG4gICAgVXNpbmc6ICd1c2luZycsXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb3BlcmF0aW9uLW5vZGUtdmlzaXRvci5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBPcGVyYXRpb25Ob2RlVmlzaXRvciB7XG4gICAgbm9kZVN0YWNrID0gW107XG4gICAgZ2V0IHBhcmVudE5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVTdGFja1t0aGlzLm5vZGVTdGFjay5sZW5ndGggLSAyXTtcbiAgICB9XG4gICAgI3Zpc2l0b3JzID0gZnJlZXplKHtcbiAgICAgICAgQWxpYXNOb2RlOiB0aGlzLnZpc2l0QWxpYXMuYmluZCh0aGlzKSxcbiAgICAgICAgQ29sdW1uTm9kZTogdGhpcy52aXNpdENvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBJZGVudGlmaWVyTm9kZTogdGhpcy52aXNpdElkZW50aWZpZXIuYmluZCh0aGlzKSxcbiAgICAgICAgU2NoZW1hYmxlSWRlbnRpZmllck5vZGU6IHRoaXMudmlzaXRTY2hlbWFibGVJZGVudGlmaWVyLmJpbmQodGhpcyksXG4gICAgICAgIFJhd05vZGU6IHRoaXMudmlzaXRSYXcuYmluZCh0aGlzKSxcbiAgICAgICAgUmVmZXJlbmNlTm9kZTogdGhpcy52aXNpdFJlZmVyZW5jZS5iaW5kKHRoaXMpLFxuICAgICAgICBTZWxlY3RRdWVyeU5vZGU6IHRoaXMudmlzaXRTZWxlY3RRdWVyeS5iaW5kKHRoaXMpLFxuICAgICAgICBTZWxlY3Rpb25Ob2RlOiB0aGlzLnZpc2l0U2VsZWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIFRhYmxlTm9kZTogdGhpcy52aXNpdFRhYmxlLmJpbmQodGhpcyksXG4gICAgICAgIEZyb21Ob2RlOiB0aGlzLnZpc2l0RnJvbS5iaW5kKHRoaXMpLFxuICAgICAgICBTZWxlY3RBbGxOb2RlOiB0aGlzLnZpc2l0U2VsZWN0QWxsLmJpbmQodGhpcyksXG4gICAgICAgIEFuZE5vZGU6IHRoaXMudmlzaXRBbmQuYmluZCh0aGlzKSxcbiAgICAgICAgT3JOb2RlOiB0aGlzLnZpc2l0T3IuYmluZCh0aGlzKSxcbiAgICAgICAgVmFsdWVOb2RlOiB0aGlzLnZpc2l0VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgICAgVmFsdWVMaXN0Tm9kZTogdGhpcy52aXNpdFZhbHVlTGlzdC5iaW5kKHRoaXMpLFxuICAgICAgICBQcmltaXRpdmVWYWx1ZUxpc3ROb2RlOiB0aGlzLnZpc2l0UHJpbWl0aXZlVmFsdWVMaXN0LmJpbmQodGhpcyksXG4gICAgICAgIFBhcmVuc05vZGU6IHRoaXMudmlzaXRQYXJlbnMuYmluZCh0aGlzKSxcbiAgICAgICAgSm9pbk5vZGU6IHRoaXMudmlzaXRKb2luLmJpbmQodGhpcyksXG4gICAgICAgIE9wZXJhdG9yTm9kZTogdGhpcy52aXNpdE9wZXJhdG9yLmJpbmQodGhpcyksXG4gICAgICAgIFdoZXJlTm9kZTogdGhpcy52aXNpdFdoZXJlLmJpbmQodGhpcyksXG4gICAgICAgIEluc2VydFF1ZXJ5Tm9kZTogdGhpcy52aXNpdEluc2VydFF1ZXJ5LmJpbmQodGhpcyksXG4gICAgICAgIERlbGV0ZVF1ZXJ5Tm9kZTogdGhpcy52aXNpdERlbGV0ZVF1ZXJ5LmJpbmQodGhpcyksXG4gICAgICAgIFJldHVybmluZ05vZGU6IHRoaXMudmlzaXRSZXR1cm5pbmcuYmluZCh0aGlzKSxcbiAgICAgICAgQ3JlYXRlVGFibGVOb2RlOiB0aGlzLnZpc2l0Q3JlYXRlVGFibGUuYmluZCh0aGlzKSxcbiAgICAgICAgQWRkQ29sdW1uTm9kZTogdGhpcy52aXNpdEFkZENvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBDb2x1bW5EZWZpbml0aW9uTm9kZTogdGhpcy52aXNpdENvbHVtbkRlZmluaXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcFRhYmxlTm9kZTogdGhpcy52aXNpdERyb3BUYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICBEYXRhVHlwZU5vZGU6IHRoaXMudmlzaXREYXRhVHlwZS5iaW5kKHRoaXMpLFxuICAgICAgICBPcmRlckJ5Tm9kZTogdGhpcy52aXNpdE9yZGVyQnkuYmluZCh0aGlzKSxcbiAgICAgICAgT3JkZXJCeUl0ZW1Ob2RlOiB0aGlzLnZpc2l0T3JkZXJCeUl0ZW0uYmluZCh0aGlzKSxcbiAgICAgICAgR3JvdXBCeU5vZGU6IHRoaXMudmlzaXRHcm91cEJ5LmJpbmQodGhpcyksXG4gICAgICAgIEdyb3VwQnlJdGVtTm9kZTogdGhpcy52aXNpdEdyb3VwQnlJdGVtLmJpbmQodGhpcyksXG4gICAgICAgIFVwZGF0ZVF1ZXJ5Tm9kZTogdGhpcy52aXNpdFVwZGF0ZVF1ZXJ5LmJpbmQodGhpcyksXG4gICAgICAgIENvbHVtblVwZGF0ZU5vZGU6IHRoaXMudmlzaXRDb2x1bW5VcGRhdGUuYmluZCh0aGlzKSxcbiAgICAgICAgTGltaXROb2RlOiB0aGlzLnZpc2l0TGltaXQuYmluZCh0aGlzKSxcbiAgICAgICAgT2Zmc2V0Tm9kZTogdGhpcy52aXNpdE9mZnNldC5iaW5kKHRoaXMpLFxuICAgICAgICBPbkNvbmZsaWN0Tm9kZTogdGhpcy52aXNpdE9uQ29uZmxpY3QuYmluZCh0aGlzKSxcbiAgICAgICAgT25EdXBsaWNhdGVLZXlOb2RlOiB0aGlzLnZpc2l0T25EdXBsaWNhdGVLZXkuYmluZCh0aGlzKSxcbiAgICAgICAgQ3JlYXRlSW5kZXhOb2RlOiB0aGlzLnZpc2l0Q3JlYXRlSW5kZXguYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcEluZGV4Tm9kZTogdGhpcy52aXNpdERyb3BJbmRleC5iaW5kKHRoaXMpLFxuICAgICAgICBMaXN0Tm9kZTogdGhpcy52aXNpdExpc3QuYmluZCh0aGlzKSxcbiAgICAgICAgUHJpbWFyeUtleUNvbnN0cmFpbnROb2RlOiB0aGlzLnZpc2l0UHJpbWFyeUtleUNvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgVW5pcXVlQ29uc3RyYWludE5vZGU6IHRoaXMudmlzaXRVbmlxdWVDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIFJlZmVyZW5jZXNOb2RlOiB0aGlzLnZpc2l0UmVmZXJlbmNlcy5iaW5kKHRoaXMpLFxuICAgICAgICBDaGVja0NvbnN0cmFpbnROb2RlOiB0aGlzLnZpc2l0Q2hlY2tDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIFdpdGhOb2RlOiB0aGlzLnZpc2l0V2l0aC5iaW5kKHRoaXMpLFxuICAgICAgICBDb21tb25UYWJsZUV4cHJlc3Npb25Ob2RlOiB0aGlzLnZpc2l0Q29tbW9uVGFibGVFeHByZXNzaW9uLmJpbmQodGhpcyksXG4gICAgICAgIENvbW1vblRhYmxlRXhwcmVzc2lvbk5hbWVOb2RlOiB0aGlzLnZpc2l0Q29tbW9uVGFibGVFeHByZXNzaW9uTmFtZS5iaW5kKHRoaXMpLFxuICAgICAgICBIYXZpbmdOb2RlOiB0aGlzLnZpc2l0SGF2aW5nLmJpbmQodGhpcyksXG4gICAgICAgIENyZWF0ZVNjaGVtYU5vZGU6IHRoaXMudmlzaXRDcmVhdGVTY2hlbWEuYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcFNjaGVtYU5vZGU6IHRoaXMudmlzaXREcm9wU2NoZW1hLmJpbmQodGhpcyksXG4gICAgICAgIEFsdGVyVGFibGVOb2RlOiB0aGlzLnZpc2l0QWx0ZXJUYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wQ29sdW1uTm9kZTogdGhpcy52aXNpdERyb3BDb2x1bW4uYmluZCh0aGlzKSxcbiAgICAgICAgUmVuYW1lQ29sdW1uTm9kZTogdGhpcy52aXNpdFJlbmFtZUNvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBBbHRlckNvbHVtbk5vZGU6IHRoaXMudmlzaXRBbHRlckNvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBNb2RpZnlDb2x1bW5Ob2RlOiB0aGlzLnZpc2l0TW9kaWZ5Q29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIEFkZENvbnN0cmFpbnROb2RlOiB0aGlzLnZpc2l0QWRkQ29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wQ29uc3RyYWludE5vZGU6IHRoaXMudmlzaXREcm9wQ29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBSZW5hbWVDb25zdHJhaW50Tm9kZTogdGhpcy52aXNpdFJlbmFtZUNvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgRm9yZWlnbktleUNvbnN0cmFpbnROb2RlOiB0aGlzLnZpc2l0Rm9yZWlnbktleUNvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgQ3JlYXRlVmlld05vZGU6IHRoaXMudmlzaXRDcmVhdGVWaWV3LmJpbmQodGhpcyksXG4gICAgICAgIFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3Tm9kZTogdGhpcy52aXNpdFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3LmJpbmQodGhpcyksXG4gICAgICAgIERyb3BWaWV3Tm9kZTogdGhpcy52aXNpdERyb3BWaWV3LmJpbmQodGhpcyksXG4gICAgICAgIEdlbmVyYXRlZE5vZGU6IHRoaXMudmlzaXRHZW5lcmF0ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgRGVmYXVsdFZhbHVlTm9kZTogdGhpcy52aXNpdERlZmF1bHRWYWx1ZS5iaW5kKHRoaXMpLFxuICAgICAgICBPbk5vZGU6IHRoaXMudmlzaXRPbi5iaW5kKHRoaXMpLFxuICAgICAgICBWYWx1ZXNOb2RlOiB0aGlzLnZpc2l0VmFsdWVzLmJpbmQodGhpcyksXG4gICAgICAgIFNlbGVjdE1vZGlmaWVyTm9kZTogdGhpcy52aXNpdFNlbGVjdE1vZGlmaWVyLmJpbmQodGhpcyksXG4gICAgICAgIENyZWF0ZVR5cGVOb2RlOiB0aGlzLnZpc2l0Q3JlYXRlVHlwZS5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wVHlwZU5vZGU6IHRoaXMudmlzaXREcm9wVHlwZS5iaW5kKHRoaXMpLFxuICAgICAgICBFeHBsYWluTm9kZTogdGhpcy52aXNpdEV4cGxhaW4uYmluZCh0aGlzKSxcbiAgICAgICAgRGVmYXVsdEluc2VydFZhbHVlTm9kZTogdGhpcy52aXNpdERlZmF1bHRJbnNlcnRWYWx1ZS5iaW5kKHRoaXMpLFxuICAgICAgICBBZ2dyZWdhdGVGdW5jdGlvbk5vZGU6IHRoaXMudmlzaXRBZ2dyZWdhdGVGdW5jdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBPdmVyTm9kZTogdGhpcy52aXNpdE92ZXIuYmluZCh0aGlzKSxcbiAgICAgICAgUGFydGl0aW9uQnlOb2RlOiB0aGlzLnZpc2l0UGFydGl0aW9uQnkuYmluZCh0aGlzKSxcbiAgICAgICAgUGFydGl0aW9uQnlJdGVtTm9kZTogdGhpcy52aXNpdFBhcnRpdGlvbkJ5SXRlbS5iaW5kKHRoaXMpLFxuICAgICAgICBTZXRPcGVyYXRpb25Ob2RlOiB0aGlzLnZpc2l0U2V0T3BlcmF0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIEJpbmFyeU9wZXJhdGlvbk5vZGU6IHRoaXMudmlzaXRCaW5hcnlPcGVyYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgVW5hcnlPcGVyYXRpb25Ob2RlOiB0aGlzLnZpc2l0VW5hcnlPcGVyYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgVXNpbmdOb2RlOiB0aGlzLnZpc2l0VXNpbmcuYmluZCh0aGlzKSxcbiAgICAgICAgRnVuY3Rpb25Ob2RlOiB0aGlzLnZpc2l0RnVuY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgQ2FzZU5vZGU6IHRoaXMudmlzaXRDYXNlLmJpbmQodGhpcyksXG4gICAgICAgIFdoZW5Ob2RlOiB0aGlzLnZpc2l0V2hlbi5iaW5kKHRoaXMpLFxuICAgICAgICBKU09OUmVmZXJlbmNlTm9kZTogdGhpcy52aXNpdEpTT05SZWZlcmVuY2UuYmluZCh0aGlzKSxcbiAgICAgICAgSlNPTlBhdGhOb2RlOiB0aGlzLnZpc2l0SlNPTlBhdGguYmluZCh0aGlzKSxcbiAgICAgICAgSlNPTlBhdGhMZWdOb2RlOiB0aGlzLnZpc2l0SlNPTlBhdGhMZWcuYmluZCh0aGlzKSxcbiAgICAgICAgSlNPTk9wZXJhdG9yQ2hhaW5Ob2RlOiB0aGlzLnZpc2l0SlNPTk9wZXJhdG9yQ2hhaW4uYmluZCh0aGlzKSxcbiAgICAgICAgVHVwbGVOb2RlOiB0aGlzLnZpc2l0VHVwbGUuYmluZCh0aGlzKSxcbiAgICAgICAgTWVyZ2VRdWVyeU5vZGU6IHRoaXMudmlzaXRNZXJnZVF1ZXJ5LmJpbmQodGhpcyksXG4gICAgICAgIE1hdGNoZWROb2RlOiB0aGlzLnZpc2l0TWF0Y2hlZC5iaW5kKHRoaXMpLFxuICAgICAgICBBZGRJbmRleE5vZGU6IHRoaXMudmlzaXRBZGRJbmRleC5iaW5kKHRoaXMpLFxuICAgICAgICBDYXN0Tm9kZTogdGhpcy52aXNpdENhc3QuYmluZCh0aGlzKSxcbiAgICAgICAgRmV0Y2hOb2RlOiB0aGlzLnZpc2l0RmV0Y2guYmluZCh0aGlzKSxcbiAgICAgICAgVG9wTm9kZTogdGhpcy52aXNpdFRvcC5iaW5kKHRoaXMpLFxuICAgICAgICBPdXRwdXROb2RlOiB0aGlzLnZpc2l0T3V0cHV0LmJpbmQodGhpcyksXG4gICAgICAgIE9yQWN0aW9uTm9kZTogdGhpcy52aXNpdE9yQWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIENvbGxhdGVOb2RlOiB0aGlzLnZpc2l0Q29sbGF0ZS5iaW5kKHRoaXMpLFxuICAgIH0pO1xuICAgIHZpc2l0Tm9kZSA9IChub2RlKSA9PiB7XG4gICAgICAgIHRoaXMubm9kZVN0YWNrLnB1c2gobm9kZSk7XG4gICAgICAgIHRoaXMuI3Zpc2l0b3JzW25vZGUua2luZF0obm9kZSk7XG4gICAgICAgIHRoaXMubm9kZVN0YWNrLnBvcCgpO1xuICAgIH07XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2RpYWxlY3QtYWRhcHRlci1iYXNlLmQudHNcIiAvPlxuLyoqXG4gKiBBIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIGBEaWFsZWN0QWRhcHRlcmAgd2l0aCBzZW5zaWJsZSBkZWZhdWx0IHZhbHVlcy5cbiAqIFRoaXJkLXBhcnR5IGRpYWxlY3RzIGNhbiBleHRlbmQgdGhpcyBpbnN0ZWFkIG9mIGltcGxlbWVudGluZyB0aGUgYERpYWxlY3RBZGFwdGVyYFxuICogaW50ZXJmYWNlIGZyb20gc2NyYXRjaC4gVGhhdCB3YXkgYWxsIG5ldyBzZXR0aW5ncyB3aWxsIGdldCBkZWZhdWx0IHZhbHVlcyB3aGVuXG4gKiB0aGV5IGFyZSBhZGRlZCBhbmQgdGhlcmUgd2lsbCBiZSBsZXNzIGJyZWFraW5nIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEaWFsZWN0QWRhcHRlckJhc2Uge1xuICAgIGdldCBzdXBwb3J0c0NyZWF0ZUlmTm90RXhpc3RzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IHN1cHBvcnRzVHJhbnNhY3Rpb25hbERkbCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQgc3VwcG9ydHNSZXR1cm5pbmcoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IHN1cHBvcnRzT3V0cHV0KCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9wb3N0Z3Jlcy1xdWVyeS1jb21waWxlci5kLnRzXCIgLz5cbmltcG9ydCB7IERlZmF1bHRRdWVyeUNvbXBpbGVyIH0gZnJvbSAnLi4vLi4vcXVlcnktY29tcGlsZXIvZGVmYXVsdC1xdWVyeS1jb21waWxlci5qcyc7XG5jb25zdCBJRF9XUkFQX1JFR0VYID0gL1wiL2c7XG5leHBvcnQgY2xhc3MgUG9zdGdyZXNRdWVyeUNvbXBpbGVyIGV4dGVuZHMgRGVmYXVsdFF1ZXJ5Q29tcGlsZXIge1xuICAgIHNhbml0aXplSWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBpZGVudGlmaWVyLnJlcGxhY2UoSURfV1JBUF9SRUdFWCwgJ1wiXCInKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3Bvc3RncmVzLWFkYXB0ZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBzcWwgfSBmcm9tICcuLi8uLi9yYXctYnVpbGRlci9zcWwuanMnO1xuaW1wb3J0IHsgRGlhbGVjdEFkYXB0ZXJCYXNlIH0gZnJvbSAnLi4vZGlhbGVjdC1hZGFwdGVyLWJhc2UuanMnO1xuLy8gUmFuZG9tIGlkIGZvciBvdXIgdHJhbnNhY3Rpb24gbG9jay5cbmNvbnN0IExPQ0tfSUQgPSBCaWdJbnQoJzM4NTMzMTQ3OTEwNjIzMDkxMDcnKTtcbmV4cG9ydCBjbGFzcyBQb3N0Z3Jlc0FkYXB0ZXIgZXh0ZW5kcyBEaWFsZWN0QWRhcHRlckJhc2Uge1xuICAgIGdldCBzdXBwb3J0c1RyYW5zYWN0aW9uYWxEZGwoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgc3VwcG9ydHNSZXR1cm5pbmcoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhc3luYyBhY3F1aXJlTWlncmF0aW9uTG9jayhkYiwgX29wdCkge1xuICAgICAgICAvLyBBY3F1aXJlIGEgdHJhbnNhY3Rpb24gbGV2ZWwgYWR2aXNvcnkgbG9jay5cbiAgICAgICAgYXdhaXQgc3FsIGBzZWxlY3QgcGdfYWR2aXNvcnlfeGFjdF9sb2NrKCR7c3FsLmxpdChMT0NLX0lEKX0pYC5leGVjdXRlKGRiKTtcbiAgICB9XG4gICAgYXN5bmMgcmVsZWFzZU1pZ3JhdGlvbkxvY2soX2RiLCBfb3B0KSB7XG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4gYHBnX2Fkdmlzb3J5X3hhY3RfbG9ja2AgaXMgYXV0b21hdGljYWxseSByZWxlYXNlZCBhdCB0aGVcbiAgICAgICAgLy8gZW5kIG9mIHRoZSB0cmFuc2FjdGlvbiBhbmQgc2luY2UgYHN1cHBvcnRzVHJhbnNhY3Rpb25hbERkbGAgdHJ1ZSwgd2Uga25vd1xuICAgICAgICAvLyB0aGUgYGRiYCBpbnN0YW5jZSBwYXNzZWQgdG8gYWNxdWlyZU1pZ3JhdGlvbkxvY2sgaXMgYWN0dWFsbHkgYSB0cmFuc2FjdGlvbi5cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgdHlwZSBLeXNlbHksIFBvc3RncmVzQWRhcHRlciwgUG9zdGdyZXNRdWVyeUNvbXBpbGVyIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGdldEJ1aWxkZXIgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxEYXRhYmFzZSA9IGFueT4oXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pOiBLeXNlbHk8RGF0YWJhc2U+IHtcbiAgcmV0dXJuIGdldEJ1aWxkZXIoeyAuLi5yZXF1aXJlbWVudHMsIEFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlciwgUXVlcnlDb21waWxlcjogUG9zdGdyZXNRdWVyeUNvbXBpbGVyIH0pO1xufVxuIiwgImltcG9ydCB7IHR5cGUgU2VsZWN0UXVlcnlCdWlsZGVyLCBzcWwgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSBcImt5c2VseS9oZWxwZXJzL3Bvc3RncmVzXCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgY29tcGlsZSwgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgZ2V0UG9zdGdyZVNRTEJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5cbmNvbnN0IFJFR1VMQVJfVEFCTEVfS0lORCA9IFwiclwiO1xuY29uc3QgVklFV19UQUJMRV9LSU5EID0gXCJ2XCI7XG5jb25zdCBUQUJMRV9LSU5EUyA9IFtSRUdVTEFSX1RBQkxFX0tJTkQsIFZJRVdfVEFCTEVfS0lORF0gYXMgY29uc3Q7XG50eXBlIFRhYmxlS2luZCA9ICh0eXBlb2YgVEFCTEVfS0lORFMpW251bWJlcl07XG5cbmludGVyZmFjZSBEYXRhYmFzZSB7XG4gIC8qKiBjb2x1bW5zICovXG4gIFwicGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGVcIjoge1xuICAgIC8qKiBjb2x1bW4gb3JkZXIgbnVtYmVyIGluIGl0cyB0YWJsZSAqL1xuICAgIGF0dG51bTogbnVtYmVyO1xuICAgIC8qKiB0YWJsZS92aWV3IGlkZW50aWZpZXIgKi9cbiAgICBhdHRyZWxpZDogc3RyaW5nO1xuICAgIC8qKiBjb2x1bW4gbmFtZSAqL1xuICAgIGF0dG5hbWU6IHN0cmluZztcbiAgICAvKiogd2FzIHRoZSBjb2x1bW4gZHJvcHBlZC4gZHJvcHBlZCBjb2x1bW5zIG1pZ2h0IG5vdCBiZSAxMDAlIHJlbW92ZWQgaW1tZWRpYXRlbHkuICovXG4gICAgYXR0aXNkcm9wcGVkOiBib29sZWFuO1xuICAgIC8qKiBjb2x1bW4gZGF0YXR5cGUgaWRlbnRpZmllciAqL1xuICAgIGF0dHR5cGlkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGlvbiBmbGFnIGZvciBjb21wdXRlZCBjb2x1bW5zOlxuICAgICAqICcnIChlbXB0eSkgZm9yIHJlZ3VsYXIgY29sdW1ucyxcbiAgICAgKiAncycgZm9yIFNUT1JFRCBnZW5lcmF0ZWQgY29sdW1ucyAoUG9zdGdyZXMgR0VORVJBVEVEIEFMV0FZUyBBUykuXG4gICAgICovXG4gICAgYXR0Z2VuZXJhdGVkOiBcIlwiIHwgXCJzXCI7XG4gICAgLyoqIE5PVCBOVUxMIGNvbnN0cmFpbnQ6IHRydWUgaWYgdGhlIGNvbHVtbiBoYXMgYSBOT1QgTlVMTCBjb25zdHJhaW50ICovXG4gICAgYXR0bm90bnVsbDogYm9vbGVhbjtcbiAgfTtcbiAgLyoqIHJlc291cmNlcywgZS5nLiB0YWJsZXMsIHNlcXVlbmNlcywgZXRjLiAqL1xuICBcInBnX2NhdGFsb2cucGdfY2xhc3NcIjoge1xuICAgIC8qKiByZXNvdXJjZSBpZCAqL1xuICAgIG9pZDogbnVtYmVyO1xuICAgIC8qKiByZXNvdXJjZSBuYW1lICovXG4gICAgcmVsbmFtZTogc3RyaW5nO1xuICAgIC8qKiBzY2hlbWEgaWQgKi9cbiAgICByZWxuYW1lc3BhY2U6IG51bWJlcjtcbiAgICAvKiogcmVzb3VyY2Uga2luZDogcmVndWxhciB0YWJsZSwgdmlldyAqL1xuICAgIHJlbGtpbmQ6IFRhYmxlS2luZDtcbiAgfTtcbiAgLyoqIGVudW0gdHlwZXMnIHZhbHVlcyAqL1xuICBcInBnX2NhdGFsb2cucGdfZW51bVwiOiB7XG4gICAgLyoqIGVudW0gdmFsdWUgKi9cbiAgICBlbnVtbGFiZWw6IHN0cmluZztcbiAgICAvKiogZW51bSdzIHR5cGUgaWQgKi9cbiAgICBlbnVtdHlwaWQ6IG51bWJlcjtcbiAgfTtcbiAgLyoqIHNjaGVtYXMgKi9cbiAgXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZVwiOiB7XG4gICAgLyoqIHNjaGVtYSBuYW1lICovXG4gICAgbnNwbmFtZTogc3RyaW5nO1xuICAgIC8qKiBzY2hlbWEgaWQgKi9cbiAgICBvaWQ6IG51bWJlcjtcbiAgfTtcbiAgLyoqIGRhdGF0eXBlcyAqL1xuICBcInBnX2NhdGFsb2cucGdfdHlwZVwiOiB7XG4gICAgLyoqIHR5cGUgaWQgKi9cbiAgICBvaWQ6IG51bWJlcjtcbiAgICAvKiogdHlwZSBuYW1lICovXG4gICAgdHlwbmFtZTogc3RyaW5nO1xuICAgIC8qKiB0eXBlJ3Mgc2NoZW1hIChha2EgbmFtZXNwYWNlKSBpZCAqL1xuICAgIHR5cG5hbWVzcGFjZTogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIHR5cGUncyBraW5kXG4gICAgICpcbiAgICAgKiAnZScgLSBlbnVtIHR5cGVcbiAgICAgKi9cbiAgICB0eXB0eXBlOiBcImVcIiB8IChzdHJpbmcgJiB7fSk7XG4gIH07XG4gIC8qKiBjb25zdHJhaW50cyAqL1xuICBcInBnX2NhdGFsb2cucGdfY29uc3RyYWludFwiOiB7XG4gICAgLyoqIHJlbGF0aW9uICh0YWJsZSkgaWQgd2hpY2ggdGhpcyBjb25zdHJhaW50IHdhcyBjcmVhdGVkIGZvciAqL1xuICAgIGNvbnJlbGlkOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogY29uc3RyYWludCB0eXBlLlxuICAgICAqXG4gICAgICogYCdwJ2AgLSBwcmltYXJ5IGtleSBjb25zdHJhaW50LlxuICAgICAqIGAnZidgIC0gZm9yZWlnbiBrZXkgY29uc3RyYWludC5cbiAgICAgKi9cbiAgICBjb250eXBlOiBcInBcIiB8IFwiZlwiIHwgKHN0cmluZyAmIHt9KTtcbiAgICAvKipcbiAgICAgKiBhbiBvcmRlcmVkIGFycmF5IG9mIGNvbHVtbnMgaW5jbHVkZWQgaW4gdGhlIGNvbnN0cmFpbnQuXG4gICAgICpcbiAgICAgKiB0aGUgY29sdW1ucyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlaXIgb3JkaW5hbCBudW1iZXIgKGBhdHRudW1gKSBpbiB0aGVpciByZWxhdGlvbiAodGFibGUpLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgYCd7MSwzfSdgIC0gYSBjb25zdHJhaW50IHdpdGggMiBjb2x1bW5zLCB0aGUgMXN0ICYgM3JkIGluIHRoZWlyIHRhYmxlLlxuICAgICAqL1xuICAgIGNvbmtleTogbnVtYmVyW107XG4gICAgLyoqIGlmIGEgZm9yZWlnbiBrZXksIHRoZSByZWZlcmVuY2VkIHRhYmxlICovXG4gICAgY29uZnJlbGlkOiBudW1iZXI7XG4gICAgLyoqIGlmIGEgZm9yZWlnbiBrZXksIHRoZSByZWZlcmVuY2VkIGNvbHVtbnMgKi9cbiAgICBjb25ma2V5OiBudW1iZXJbXTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCByZXR1cm5zIG1ldGFkYXRhIGZvciBhbGwgdXNlci1kZWZpbmVkIHRhYmxlcyBhbmQgdmlld3MgaW4gdGhlIGRhdGFiYXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPikge1xuICByZXR1cm4gY29tcGlsZShcbiAgICBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxEYXRhYmFzZT4ocmVxdWlyZW1lbnRzKVxuICAgICAgLnNlbGVjdEZyb20oXCJwZ19jYXRhbG9nLnBnX2NsYXNzIGFzIGNsc1wiKVxuICAgICAgLmlubmVySm9pbihcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIGFzIG5zXCIsIFwiY2xzLnJlbG5hbWVzcGFjZVwiLCBcIm5zLm9pZFwiKVxuICAgICAgLiRjYWxsKGV4Y2x1ZGVTeXN0ZW1UYWJsZXMpXG4gICAgICAvLyByZWd1bGFyIHRhYmxlcyBvciB2aWV3c1xuICAgICAgLndoZXJlKFwiY2xzLnJlbGtpbmRcIiwgXCJpblwiLCBUQUJMRV9LSU5EUylcbiAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgIFwibnMubnNwbmFtZSBhcyBzY2hlbWFcIixcbiAgICAgICAgXCJjbHMucmVsbmFtZSBhcyBuYW1lXCIsXG4gICAgICAgIGpzb25BcnJheUZyb20oXG4gICAgICAgICAgZWJcbiAgICAgICAgICAgIC5zZWxlY3RGcm9tKFwicGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYXMgYXR0XCIpXG4gICAgICAgICAgICAuaW5uZXJKb2luKFwicGdfY2F0YWxvZy5wZ190eXBlIGFzIHR5cFwiLCBcInR5cC5vaWRcIiwgXCJhdHQuYXR0dHlwaWRcIilcbiAgICAgICAgICAgIC5pbm5lckpvaW4oXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBhcyB0bnNcIiwgXCJ0bnMub2lkXCIsIFwidHlwLnR5cG5hbWVzcGFjZVwiKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19jb25zdHJhaW50IGFzIHBrX2NvblwiLCAoamIpID0+XG4gICAgICAgICAgICAgIGpiXG4gICAgICAgICAgICAgICAgLm9uKFwicGtfY29uLmNvbnR5cGVcIiwgXCI9XCIsIFwicFwiKVxuICAgICAgICAgICAgICAgIC5vblJlZihcInBrX2Nvbi5jb25yZWxpZFwiLCBcIj1cIiwgXCJjbHMub2lkXCIpXG4gICAgICAgICAgICAgICAgLm9uKChlYikgPT4gZWIoXCJhdHQuYXR0bnVtXCIsIFwiPVwiLCBlYi5mbi5hbnkoXCJwa19jb24uY29ua2V5XCIpKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJwZ19jYXRhbG9nLnBnX2NvbnN0cmFpbnQgYXMgZmtfY29uXCIsIChqYikgPT5cbiAgICAgICAgICAgICAgamJcbiAgICAgICAgICAgICAgICAub24oXCJma19jb24uY29udHlwZVwiLCBcIj1cIiwgXCJmXCIpXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwiZmtfY29uLmNvbnJlbGlkXCIsIFwiPVwiLCBcImNscy5vaWRcIilcbiAgICAgICAgICAgICAgICAub24oKGViKSA9PiBlYihcImF0dC5hdHRudW1cIiwgXCI9XCIsIGViLmZuLmFueShcImZrX2Nvbi5jb25rZXlcIikpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfY2xhc3MgYXMgZmtfY2xzXCIsIFwiZmtfY2xzLm9pZFwiLCBcImZrX2Nvbi5jb25mcmVsaWRcIilcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIGFzIGZrX25zXCIsIFwiZmtfbnMub2lkXCIsIFwiZmtfY2xzLnJlbG5hbWVzcGFjZVwiKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYXMgZmtfYXR0XCIsIChqYikgPT5cbiAgICAgICAgICAgICAgamJcbiAgICAgICAgICAgICAgICAub25SZWYoXCJma19hdHQuYXR0cmVsaWRcIiwgXCI9XCIsIFwiZmtfY2xzLm9pZFwiKVxuICAgICAgICAgICAgICAgIC8vIFVzZSBhIGNhbGxiYWNrIGZvciB0aGUgLm9uKCkgY29uZGl0aW9uIHRvIGVuc3VyZSBjb3JyZWN0IGNvbnRleHQgZm9yIHR5cGVzXG4gICAgICAgICAgICAgICAgLm9uKChvbl9lYikgPT4gb25fZWIoXCJma19hdHQuYXR0bnVtXCIsIFwiPVwiLCBvbl9lYi5mbi5hbnkoXCJma19jb24uY29uZmtleVwiKSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLndoZXJlUmVmKFwiYXR0LmF0dHJlbGlkXCIsIFwiPVwiLCBcImNscy5vaWRcIilcbiAgICAgICAgICAgIC8vIGV4Y2x1ZGUgc3lzdGVtIGNvbHVtbnNcbiAgICAgICAgICAgIC53aGVyZShcImF0dC5hdHRudW1cIiwgXCI+PVwiLCAwKVxuICAgICAgICAgICAgLndoZXJlKFwiYXR0LmF0dGlzZHJvcHBlZFwiLCBcIiE9XCIsIHRydWUpXG4gICAgICAgICAgICAuc2VsZWN0KFtcbiAgICAgICAgICAgICAgXCJhdHQuYXR0bmFtZSBhcyBuYW1lXCIsXG4gICAgICAgICAgICAgIFwidHlwLnR5cG5hbWUgYXMgZGF0YXR5cGVcIixcbiAgICAgICAgICAgICAgXCJ0bnMubnNwbmFtZSBhcyBkYXRhdHlwZV9zY2hlbWFcIixcbiAgICAgICAgICAgICAgXCJma19ucy5uc3BuYW1lIGFzIGZvcmVpZ25fa2V5X3NjaGVtYVwiLFxuICAgICAgICAgICAgICBcImZrX2Nscy5yZWxuYW1lIGFzIGZvcmVpZ25fa2V5X3RhYmxlXCIsXG4gICAgICAgICAgICAgIFwiZmtfYXR0LmF0dG5hbWUgYXMgZm9yZWlnbl9rZXlfY29sdW1uXCIsXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICAgLnNlbGVjdCgoZWIpID0+IFtcbiAgICAgICAgICAgICAgZWIoXCJwa19jb24uY29ua2V5XCIsIFwiaXMgbm90XCIsIG51bGwpLiRjYXN0VG88Ym9vbGVhbj4oKS5hcyhcInBrXCIpLFxuICAgICAgICAgICAgICBlYihcImF0dC5hdHRnZW5lcmF0ZWRcIiwgXCIhPVwiLCBcIlwiKS4kY2FzdFRvPGJvb2xlYW4+KCkuYXMoXCJjb21wdXRlZFwiKSxcbiAgICAgICAgICAgICAgZWIoXCJhdHQuYXR0bm90bnVsbFwiLCBcIiE9XCIsIHRydWUpLiRjYXN0VG88Ym9vbGVhbj4oKS5hcyhcIm51bGxhYmxlXCIpLFxuICAgICAgICAgICAgICBlYi5mblxuICAgICAgICAgICAgICAgIC5jb2FsZXNjZShcbiAgICAgICAgICAgICAgICAgIGViXG4gICAgICAgICAgICAgICAgICAgIC5zZWxlY3RGcm9tKFwicGdfY2F0YWxvZy5wZ19lbnVtIGFzIGVubVwiKVxuICAgICAgICAgICAgICAgICAgICAud2hlcmVSZWYoXCJlbm0uZW51bXR5cGlkXCIsIFwiPVwiLCBcInR5cC5vaWRcIilcbiAgICAgICAgICAgICAgICAgICAgLnNlbGVjdCgoZWIpID0+IGViLmZuLmpzb25BZ2coZWIucmVmKFwiZW5tLmVudW1sYWJlbFwiKSkuYXMoXCJvXCIpKSxcbiAgICAgICAgICAgICAgICAgIHNxbDxzdHJpbmdbXT5gJ1tdJ2AsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hcyhcIm9wdGlvbnNcIiksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgKS5hcyhcImNvbHVtbnNcIiksXG4gICAgICBdKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUYWJsZXNRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBzY2hlbWE6IFwiem9vXCIsXG4gICAgICBuYW1lOiBcImFuaW1hbHNcIixcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJpbnQ0XCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogdHJ1ZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NoZW1hOiBcInB1YmxpY1wiLFxuICAgICAgbmFtZTogXCJ1c2Vyc1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImludDRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJkZWxldGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInJvbGVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVfcm9sZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXSBhcyBjb25zdCBzYXRpc2ZpZXMgUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRhYmxlc1F1ZXJ5Pjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjdXJyZW50IHRpbWV6b25lIHNldHRpbmcgb2YgdGhlIFBvc3RncmVTUUwgZGF0YWJhc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lem9uZVF1ZXJ5KCkge1xuICBjb25zdCBidWlsZGVyID0gZ2V0UG9zdGdyZVNRTEJ1aWxkZXIoKTtcblxuICByZXR1cm4gY29tcGlsZShidWlsZGVyLnNlbGVjdE5vRnJvbShidWlsZGVyLmZuPHN0cmluZz4oXCJjdXJyZW50X3NldHRpbmdcIiwgW3NxbC5saXQoXCJ0aW1lem9uZVwiKV0pLmFzKFwidGltZXpvbmVcIikpKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUaW1lem9uZVF1ZXJ5KCkge1xuICByZXR1cm4gW3sgdGltZXpvbmU6IFwiVVRDXCIgfV0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUaW1lem9uZVF1ZXJ5Pjtcbn1cblxuLyoqXG4gKiBXZSBkb24ndCB3YW50IFBvc3RncmVTUUwgaW50ZXJuYWxzIGluIGludHJvc3BlY3Rpb24gcmVzdWx0cy4gVG8gYmUgdXNlZCBpbiBgJGNhbGxgLlxuICovXG5mdW5jdGlvbiBleGNsdWRlU3lzdGVtVGFibGVzPFxuICBUIGV4dGVuZHMgU2VsZWN0UXVlcnlCdWlsZGVyPFxuICAgIERhdGFiYXNlICYgeyBuczogRGF0YWJhc2VbXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZVwiXTsgY2xzOiBEYXRhYmFzZVtcInBnX2NhdGFsb2cucGdfY2xhc3NcIl0gfSxcbiAgICBcIm5zXCIgfCBcImNsc1wiLFxuICAgIG9iamVjdFxuICA+LFxuPihxYjogVCk6IFQge1xuICByZXR1cm4gcWIud2hlcmUoYG5zLm5zcG5hbWVgLCBgIX5gLCBgXnBnX2ApLndoZXJlKGBucy5uc3BuYW1lYCwgYCE9YCwgYGluZm9ybWF0aW9uX3NjaGVtYWApIGFzIG5ldmVyO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9wb3N0Z3Jlcy5kLnRzXCIgLz5cbmltcG9ydCB7IHNxbCB9IGZyb20gJy4uL3Jhdy1idWlsZGVyL3NxbC5qcyc7XG4vKipcbiAqIEEgcG9zdGdyZXMgaGVscGVyIGZvciBhZ2dyZWdhdGluZyBhIHN1YnF1ZXJ5IChvciBvdGhlciBleHByZXNzaW9uKSBpbnRvIGEgSlNPTkIgYXJyYXkuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogPCEtLSBzaXRlRXhhbXBsZShcInNlbGVjdFwiLCBcIk5lc3RlZCBhcnJheVwiLCAxMTApIC0tPlxuICpcbiAqIFdoaWxlIGt5c2VseSBpcyBub3QgYW4gT1JNIGFuZCBpdCBkb2Vzbid0IGhhdmUgdGhlIGNvbmNlcHQgb2YgcmVsYXRpb25zLCB3ZSBkbyBwcm92aWRlXG4gKiBoZWxwZXJzIGZvciBmZXRjaGluZyBuZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzIGluIGEgc2luZ2xlIHF1ZXJ5LiBJbiB0aGlzIGV4YW1wbGUgd2VcbiAqIHVzZSB0aGUgYGpzb25BcnJheUZyb21gIGhlbHBlciB0byBmZXRjaCBwZXJzb24ncyBwZXRzIGFsb25nIHdpdGggdGhlIHBlcnNvbidzIGlkLlxuICpcbiAqIFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB0aGUgaGVscGVycyB1bmRlciB0aGUgYGt5c2VseS9oZWxwZXJzYCBmb2xkZXIsIGluY2x1ZGluZ1xuICogYGpzb25BcnJheUZyb21gLCBhcmUgbm90IGd1YXJhbnRlZWQgdG8gd29yayB3aXRoIHRoaXJkIHBhcnR5IGRpYWxlY3RzLiBJbiBvcmRlciBmb3JcbiAqIHRoZW0gdG8gd29yaywgdGhlIGRpYWxlY3QgbXVzdCBhdXRvbWF0aWNhbGx5IHBhcnNlIHRoZSBganNvbmAgZGF0YSB0eXBlIGludG9cbiAqIEphdmFTY3JpcHQgSlNPTiB2YWx1ZXMgbGlrZSBvYmplY3RzIGFuZCBhcnJheXMuIFNvbWUgZGlhbGVjdHMgbWlnaHQgc2ltcGx5IHJldHVyblxuICogdGhlIGRhdGEgYXMgYSBKU09OIHN0cmluZy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYFxuICogdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25BcnJheUZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC5vcmRlckJ5KCdwZXQubmFtZScpXG4gKiAgICAgKS5hcygncGV0cycpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIChcbiAqICAgc2VsZWN0IGNvYWxlc2NlKGpzb25fYWdnKGFnZyksICdbXScpIGZyb20gKFxuICogICAgIHNlbGVjdCBcInBldFwiLlwiaWRcIiBhcyBcInBldF9pZFwiLCBcInBldFwiLlwibmFtZVwiXG4gKiAgICAgZnJvbSBcInBldFwiXG4gKiAgICAgd2hlcmUgXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIlxuICogICAgIG9yZGVyIGJ5IFwicGV0XCIuXCJuYW1lXCJcbiAqICAgKSBhcyBhZ2dcbiAqICkgYXMgXCJwZXRzXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQXJyYXlGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGNvYWxlc2NlKGpzb25fYWdnKGFnZyksICdbXScpIGZyb20gJHtleHByfSBhcyBhZ2cpYDtcbn1cbi8qKlxuICogQSBwb3N0Z3JlcyBoZWxwZXIgZm9yIHR1cm5pbmcgYSBzdWJxdWVyeSAob3Igb3RoZXIgZXhwcmVzc2lvbikgaW50byBhIEpTT04gb2JqZWN0LlxuICpcbiAqIFRoZSBzdWJxdWVyeSBtdXN0IG9ubHkgcmV0dXJuIG9uZSByb3cuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogPCEtLSBzaXRlRXhhbXBsZShcInNlbGVjdFwiLCBcIk5lc3RlZCBvYmplY3RcIiwgMTIwKSAtLT5cbiAqXG4gKiBXaGlsZSBreXNlbHkgaXMgbm90IGFuIE9STSBhbmQgaXQgZG9lc24ndCBoYXZlIHRoZSBjb25jZXB0IG9mIHJlbGF0aW9ucywgd2UgZG8gcHJvdmlkZVxuICogaGVscGVycyBmb3IgZmV0Y2hpbmcgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cyBpbiBhIHNpbmdsZSBxdWVyeS4gSW4gdGhpcyBleGFtcGxlIHdlXG4gKiB1c2UgdGhlIGBqc29uT2JqZWN0RnJvbWAgaGVscGVyIHRvIGZldGNoIHBlcnNvbidzIGZhdm9yaXRlIHBldCBhbG9uZyB3aXRoIHRoZSBwZXJzb24ncyBpZC5cbiAqXG4gKiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGhlbHBlcnMgdW5kZXIgdGhlIGBreXNlbHkvaGVscGVyc2AgZm9sZGVyLCBpbmNsdWRpbmdcbiAqIGBqc29uT2JqZWN0RnJvbWAsIGFyZSBub3QgZ3VhcmFudGVlZCB0byB3b3JrIHdpdGggdGhpcmQtcGFydHkgZGlhbGVjdHMuIEluIG9yZGVyIGZvclxuICogdGhlbSB0byB3b3JrLCB0aGUgZGlhbGVjdCBtdXN0IGF1dG9tYXRpY2FsbHkgcGFyc2UgdGhlIGBqc29uYCBkYXRhIHR5cGUgaW50b1xuICogSmF2YVNjcmlwdCBKU09OIHZhbHVlcyBsaWtlIG9iamVjdHMgYW5kIGFycmF5cy4gU29tZSBkaWFsZWN0cyBtaWdodCBzaW1wbHkgcmV0dXJuXG4gKiB0aGUgZGF0YSBhcyBhIEpTT04gc3RyaW5nLiBJbiB0aGVzZSBjYXNlcyB5b3UgY2FuIHVzZSB0aGUgYnVpbHQgaW4gYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gXG4gKiB0byBwYXJzZSB0aGUgcmVzdWx0cy5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbk9iamVjdEZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25PYmplY3RGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAud2hlcmUoJ3BldC5pc19mYXZvcml0ZScsICc9JywgdHJ1ZSlcbiAqICAgICApLmFzKCdmYXZvcml0ZV9wZXQnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCAoXG4gKiAgIHNlbGVjdCB0b19qc29uKG9iaikgZnJvbSAoXG4gKiAgICAgc2VsZWN0IFwicGV0XCIuXCJpZFwiIGFzIFwicGV0X2lkXCIsIFwicGV0XCIuXCJuYW1lXCJcbiAqICAgICBmcm9tIFwicGV0XCJcbiAqICAgICB3aGVyZSBcInBldFwiLlwib3duZXJfaWRcIiA9IFwicGVyc29uXCIuXCJpZFwiXG4gKiAgICAgYW5kIFwicGV0XCIuXCJpc19mYXZvcml0ZVwiID0gJDFcbiAqICAgKSBhcyBvYmpcbiAqICkgYXMgXCJmYXZvcml0ZV9wZXRcIlxuICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25PYmplY3RGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IHRvX2pzb24ob2JqKSBmcm9tICR7ZXhwcn0gYXMgb2JqKWA7XG59XG4vKipcbiAqIFRoZSBQb3N0Z3JlU1FMIGBqc29uX2J1aWxkX29iamVjdGAgZnVuY3Rpb24uXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgaXMgb25seSBndWFyYW50ZWVkIHRvIGZ1bGx5IHdvcmsgd2l0aCB0aGUgYnVpbHQtaW4gYFBvc3RncmVzRGlhbGVjdGAuXG4gKiBXaGlsZSB0aGUgcHJvZHVjZWQgU1FMIGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgUG9zdGdyZVNRTCBkYXRhYmFzZXMsIHNvbWUgdGhpcmQtcGFydHkgZGlhbGVjdHNcbiAqIG1heSBub3QgcGFyc2UgdGhlIG5lc3RlZCBKU09OIGludG8gb2JqZWN0cy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluXG4gKiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAgdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB7IGpzb25CdWlsZE9iamVjdCB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3Bvc3RncmVzJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkJ1aWxkT2JqZWN0KHtcbiAqICAgICAgIGZpcnN0OiBlYi5yZWYoJ2ZpcnN0X25hbWUnKSxcbiAqICAgICAgIGxhc3Q6IGViLnJlZignbGFzdF9uYW1lJyksXG4gKiAgICAgICBmdWxsOiBzcWw8c3RyaW5nPmBmaXJzdF9uYW1lIHx8XHUwMEEwJyAnIHx8IGxhc3RfbmFtZWBcbiAqICAgICB9KS5hcygnbmFtZScpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/Lm5hbWUuZmlyc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5sYXN0XG4gKiByZXN1bHRbMF0/Lm5hbWUuZnVsbFxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwganNvbl9idWlsZF9vYmplY3QoXG4gKiAgICdmaXJzdCcsIGZpcnN0X25hbWUsXG4gKiAgICdsYXN0JywgbGFzdF9uYW1lLFxuICogICAnZnVsbCcsIGZpcnN0X25hbWUgfHwgJyAnIHx8IGxhc3RfbmFtZVxuICogKSBhcyBcIm5hbWVcIlxuICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25CdWlsZE9iamVjdChvYmopIHtcbiAgICByZXR1cm4gc3FsIGBqc29uX2J1aWxkX29iamVjdCgke3NxbC5qb2luKE9iamVjdC5rZXlzKG9iaikuZmxhdE1hcCgoaykgPT4gW3NxbC5saXQoayksIG9ialtrXV0pKX0pYDtcbn1cbi8qKlxuICogVGhlIFBvc3RncmVTUUwgYG1lcmdlX2FjdGlvbmAgZnVuY3Rpb24uXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBpbiBhIGByZXR1cm5pbmdgIGNsYXVzZSB0byBnZXQgdGhlIGFjdGlvbiB0aGF0IHdhc1xuICogcGVyZm9ybWVkIGluIGEgYG1lcmdlSW50b2AgcXVlcnkuIFRoZSBmdW5jdGlvbiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nXG4gKiBzdHJpbmdzOiBgJ0lOU0VSVCdgLCBgJ1VQREFURSdgLCBvciBgJ0RFTEVURSdgLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBtZXJnZUFjdGlvbiB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3Bvc3RncmVzJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5tZXJnZUludG8oJ3BlcnNvbiBhcyBwJylcbiAqICAgLnVzaW5nKCdwZXJzb25fYmFja3VwIGFzIHBiJywgJ3AuaWQnLCAncGIuaWQnKVxuICogICAud2hlbk1hdGNoZWQoKVxuICogICAudGhlblVwZGF0ZVNldCgoeyByZWYgfSkgPT4gKHtcbiAqICAgICBmaXJzdF9uYW1lOiByZWYoJ3BiLmZpcnN0X25hbWUnKSxcbiAqICAgICB1cGRhdGVkX2F0OiByZWYoJ3BiLnVwZGF0ZWRfYXQnKS4kY2FzdFRvPHN0cmluZyB8IG51bGw+KCksXG4gKiAgIH0pKVxuICogICAud2hlbk5vdE1hdGNoZWQoKVxuICogICAudGhlbkluc2VydFZhbHVlcygoeyByZWZ9KSA9PiAoe1xuICogICAgIGlkOiByZWYoJ3BiLmlkJyksXG4gKiAgICAgZmlyc3RfbmFtZTogcmVmKCdwYi5maXJzdF9uYW1lJyksXG4gKiAgICAgY3JlYXRlZF9hdDogcmVmKCdwYi51cGRhdGVkX2F0JyksXG4gKiAgICAgdXBkYXRlZF9hdDogcmVmKCdwYi51cGRhdGVkX2F0JykuJGNhc3RUbzxzdHJpbmcgfCBudWxsPigpLFxuICogICB9KSlcbiAqICAgLnJldHVybmluZyhbbWVyZ2VBY3Rpb24oKS5hcygnYWN0aW9uJyksICdwLmlkJywgJ3AudXBkYXRlZF9hdCddKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdLmFjdGlvblxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogbWVyZ2UgaW50byBcInBlcnNvblwiIGFzIFwicFwiXG4gKiB1c2luZyBcInBlcnNvbl9iYWNrdXBcIiBhcyBcInBiXCIgb24gXCJwXCIuXCJpZFwiID0gXCJwYlwiLlwiaWRcIlxuICogd2hlbiBtYXRjaGVkIHRoZW4gdXBkYXRlIHNldFxuICogICBcImZpcnN0X25hbWVcIiA9IFwicGJcIi5cImZpcnN0X25hbWVcIixcbiAqICAgXCJ1cGRhdGVkX2F0XCIgPSBcInBiXCIuXCJ1cGRhdGVkX2F0XCI6OnRleHRcbiAqIHdoZW4gbm90IG1hdGNoZWQgdGhlbiBpbnNlcnQgdmFsdWVzIChcImlkXCIsIFwiZmlyc3RfbmFtZVwiLCBcImNyZWF0ZWRfYXRcIiwgXCJ1cGRhdGVkX2F0XCIpXG4gKiB2YWx1ZXMgKFwicGJcIi5cImlkXCIsIFwicGJcIi5cImZpcnN0X25hbWVcIiwgXCJwYlwiLlwidXBkYXRlZF9hdFwiLCBcInBiXCIuXCJ1cGRhdGVkX2F0XCIpXG4gKiByZXR1cm5pbmcgbWVyZ2VfYWN0aW9uKCkgYXMgXCJhY3Rpb25cIiwgXCJwXCIuXCJpZFwiLCBcInBcIi5cInVwZGF0ZWRfYXRcIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFjdGlvbigpIHtcbiAgICByZXR1cm4gc3FsIGBtZXJnZV9hY3Rpb24oKWA7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7OztzUkFBQUEsSUNBQUMsSUNBQUMsSUE2VE8sU0FBU0MsRUFBbUJDLEVBQXVDLENBQ3hFLEdBQU0sQ0FBRSxNQUFBQyxFQUFPLE1BQUFDLENBQU0sRUFBSUYsRUFFbkJHLEVBQWVGLEVBRXJCLE9BQUFFLEVBQWEsTUFBUUQsRUFFZCxDQUFDQyxDQUFZLENBQ3RCLENDclVBQyxJQUVPLElBQU1DLEdBQTZFLENBQ3hGLEtBQU0sQ0FDSixNQUFPLFNBQ1QsRUFDQSxRQUFTLENBQ1AsTUFBTyxTQUNULEVBQ0EsTUFBTyxDQUNMLE1BQU8sUUFDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFFBQ1QsRUFDQSxPQUFRLENBQ04sTUFBTyxRQUNULEVBSUEsS0FBTSxDQUNKLE1BQU8sVUFDVCxFQUlBLFNBQVUsQ0FDUixNQUFPLFFBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxRQUNULEVB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QkFDbkIsQ0FDRixDQUNGLEVBQ0EsQ0FBQyxDQUNILEVBRUEsT0FBSUwsRUFBUUcsQ0FBTSxJQUFNLFNBQ3RCSCxFQUFRRyxDQUFNLEVBQUksQ0FDaEIsS0FBTUEsRUFDTixPQUFRLENBQUMsQ0FDWCxHQUdGSCxFQUFRRyxDQUFNLEVBQUUsT0FBT0QsQ0FBUyxFQUFJLENBQ2xDLFFBQVNFLEVBQ1QsS0FBTUYsRUFDTixPQUFBQyxDQUNGLEVBRU9KLENBQ1QsRUFDQSxDQUNFLFFBQVMsQ0FBRSxPQUFRLENBQUUsT0FBUSxDQUFDLEVBQUcsS0FBTSxRQUFTLENBQUUsRUFDbEQsU0FBQWIsRUFDQSxnQkFBQTJCLEdBQ0EsTUFBQXZCLENBQ0YsQ0FDRixDQUNGLENBRUEsSUFBTXVCLEdBQWtCLENBQ3RCLElBQ0EsS0FDQSxJQUNBLEtBQ0EsSUFDQSxLQUNBLEtBQ0EsU0FDQSxPQUNBLFdBQ0EsUUFDQSxXQUNGLEVBS08sU0FBU0MsSUFBaUIsQ0FDL0IsSUFBTWhDLEVBQVNpQyxHQUFnQixFQUN6QixDQUFDLENBQUUsU0FBQTdCLENBQVMsQ0FBQyxFQUFJOEIsR0FBa0IsRUFHekMsT0FBTzdCLEdBQW9CLENBQUUsT0FBQUwsRUFBUSxTQUFBSSxFQUFVLE1BRmpDLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSyxVQUFXLENBRUssQ0FBQyxDQWN4RCIsCiAgIm5hbWVzIjogWyJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJjcmVhdGVBZGFwdGVyRXJyb3IiLCAiYXJncyIsICJlcnJvciIsICJxdWVyeSIsICJhZGFwdGVyRXJyb3IiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiUE9TVEdSRVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlJhd0J1aWxkZXJJbXBsIiwgIl9SYXdCdWlsZGVySW1wbCIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgImFsaWFzIiwgIkFsaWFzZWRSYXdCdWlsZGVySW1wbCIsICJwbHVnaW4iLCAiI3RvT3BlcmF0aW9uTm9kZSIsICIjZ2V0RXhlY3V0b3IiLCAiZXhlY3V0b3JQcm92aWRlciIsICIjY29tcGlsZSIsICJleGVjdXRvciIsICJOT09QX1FVRVJZX0VYRUNVVE9SIiwgImNyZWF0ZVJhd0J1aWxkZXIiLCAiI3Jhd0J1aWxkZXIiLCAiI2FsaWFzIiwgInJhd0J1aWxkZXIiLCAiQWxpYXNOb2RlIiwgImlzT3BlcmF0aW9uTm9kZVNvdXJjZSIsICJJZGVudGlmaWVyTm9kZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJzcWwiLCAic3FsRnJhZ21lbnRzIiwgInBhcmFtZXRlcnMiLCAiY3JlYXRlUmF3QnVpbGRlciIsICJjcmVhdGVRdWVyeUlkIiwgIlJhd05vZGUiLCAicGFyc2VQYXJhbWV0ZXIiLCAiY29sdW1uUmVmZXJlbmNlIiwgInBhcnNlU3RyaW5nUmVmZXJlbmNlIiwgInZhbHVlIiwgInBhcnNlVmFsdWVFeHByZXNzaW9uIiwgInRhYmxlUmVmZXJlbmNlIiwgInBhcnNlVGFibGUiLCAiaWRzIiwgImZyYWdtZW50cyIsICJJZGVudGlmaWVyTm9kZSIsICJWYWx1ZU5vZGUiLCAiYXJyYXkiLCAic2VwYXJhdG9yIiwgIm5vZGVzIiwgInNlcCIsICJpIiwgInBhcmFtIiwgImlzT3BlcmF0aW9uTm9kZVNvdXJjZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJPcGVyYXRpb25Ob2RlVmlzaXRvciIsICIjdmlzaXRvcnMiLCAiZnJlZXplIiwgIm5vZGUiLCAiTElUX1dSQVBfUkVHRVgiLCAiRGVmYXVsdFF1ZXJ5Q29tcGlsZXIiLCAiT3BlcmF0aW9uTm9kZVZpc2l0b3IiLCAiI3NxbCIsICIjcGFyYW1ldGVycyIsICJub2RlIiwgInF1ZXJ5SWQiLCAiZnJlZXplIiwgIndyYXBJblBhcmVucyIsICJQYXJlbnNOb2RlIiwgIkluc2VydFF1ZXJ5Tm9kZSIsICJDcmVhdGVUYWJsZU5vZGUiLCAiQ3JlYXRlVmlld05vZGUiLCAiU2V0T3BlcmF0aW9uTm9kZSIsICJleHByZXNzaW9ucyIsICJub2RlcyIsICJzZXBhcmF0b3IiLCAibGFzdEluZGV4IiwgImkiLCAicm9vdFF1ZXJ5Tm9kZSIsICJRdWVyeU5vZGUiLCAiaXNTdWJRdWVyeSIsICJNZXJnZVF1ZXJ5Tm9kZSIsICJsb2dPbmNlIiwgIl8iLCAiaXNTdHJpbmciLCAidmFsdWVzIiwgIkpPSU5fVFlQRV9TUUwiLCAic3FsRnJhZ21lbnRzIiwgInBhcmFtcyIsICJpc0Jvb2xlYW4iLCAiU0VMRUNUX01PRElGSUVSX1NRTCIsICJPcGVyYXRvck5vZGUiLCAicGF0aExlZyIsICJpc0FycmF5TG9jYXRpb24iLCAibGVuIiwgInN0ciIsICJwYXJhbWV0ZXIiLCAiaWRlbnRpZmllciIsICJsZWZ0V3JhcCIsICJyaWdodFdyYXAiLCAic2FuaXRpemVkIiwgImMiLCAidmFsdWUiLCAiaXNOdW1iZXIiLCAiaXNOdWxsIiwgImlzRGF0ZSIsICJpc0JpZ0ludCIsICJhcnIiLCAibGVmdCIsICJyaWdodCIsICJTRUxFQ1RfTU9ESUZJRVJfUFJJT1JJVFkiLCAiY29sdW1uQWx0ZXJhdGlvbnMiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiRGlhbGVjdEFkYXB0ZXJCYXNlIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIklEX1dSQVBfUkVHRVgiLCAiUG9zdGdyZXNRdWVyeUNvbXBpbGVyIiwgIkRlZmF1bHRRdWVyeUNvbXBpbGVyIiwgImlkZW50aWZpZXIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiTE9DS19JRCIsICJQb3N0Z3Jlc0FkYXB0ZXIiLCAiRGlhbGVjdEFkYXB0ZXJCYXNlIiwgImRiIiwgIl9vcHQiLCAic3FsIiwgIl9kYiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJnZXRQb3N0Z3JlU1FMQnVpbGRlciIsICJyZXF1aXJlbWVudHMiLCAiZ2V0QnVpbGRlciIsICJQb3N0Z3Jlc0FkYXB0ZXIiLCAiUG9zdGdyZXNRdWVyeUNvbXBpbGVyIiwgImdldEluc2VydFF1ZXJ5IiwgImRldGFpbHMiLCAicmVxdWlyZW1lbnRzIiwgInRhYmxlIiwgInJvd3MiLCAidGFibGVOYW1lIiwgInNjaGVtYSIsICJjb2x1bW5zIiwgImJ1aWxkZXIiLCAiZ2V0UG9zdGdyZVNRTEJ1aWxkZXIiLCAiY29scyIsICJlbXB0eVJvd1dvcmthcm91bmQiLCAic3FsIiwgImNvbXBpbGUiLCAicm93IiwgImViIiwgImdldFNlbGVjdFF1ZXJ5IiwgInBhZ2VJbmRleCIsICJwYWdlU2l6ZSIsICJzb3J0T3JkZXIiLCAiZmlsdGVyIiwgImNvdW50UXVlcnkiLCAicWIiLCAiaXRlbSIsICJnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uIiwgImJ1aWxkQmFzZUV4cHJlc3Npb25CdWlsZGVyIiwgInNwZWMiLCAiZmlsdGVycyIsICJvckdyb3Vwc09mQW5kQnVpbGRlcnMiLCAiY3VycmVudEFuZEdyb3VwQnVpbGRlcnMiLCAiaSIsICJhbmRFeHByZXNzaW9ucyIsICJncm91cCIsICJtb2NrU2VsZWN0UXVlcnkiLCAiZ2V0VXBkYXRlUXVlcnkiLCAiY2hhbmdlcyIsICJhcHBseUluZmVycmVkUm93RmlsdGVycyIsICJnZXREZWxldGVRdWVyeSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJqc29uQXJyYXlGcm9tIiwgImV4cHIiLCAic3FsIiwgIlJFR1VMQVJfVEFCTEVfS0lORCIsICJWSUVXX1RBQkxFX0tJTkQiLCAiVEFCTEVfS0lORFMiLCAiZ2V0VGFibGVzUXVlcnkiLCAicmVxdWlyZW1lbnRzIiwgImNvbXBpbGUiLCAiZ2V0UG9zdGdyZVNRTEJ1aWxkZXIiLCAiZXhjbHVkZVN5c3RlbVRhYmxlcyIsICJlYiIsICJqc29uQXJyYXlGcm9tIiwgImpiIiwgIm9uX2ViIiwgInNxbCIsICJtb2NrVGFibGVzUXVlcnkiLCAiZ2V0VGltZXpvbmVRdWVyeSIsICJidWlsZGVyIiwgIm1vY2tUaW1lem9uZVF1ZXJ5IiwgInFiIiwgImNyZWF0ZVBvc3RncmVzQWRhcHRlciIsICJyZXF1aXJlbWVudHMiLCAiZXhlY3V0b3IiLCAib3RoZXJSZXF1aXJlbWVudHMiLCAib3B0aW9ucyIsICJ0YWJsZXNRdWVyeSIsICJnZXRUYWJsZXNRdWVyeSIsICJ0aW1lem9uZVF1ZXJ5IiwgImdldFRpbWV6b25lUXVlcnkiLCAidGFibGVzRXJyb3IiLCAidGFibGVzIiwgInRpbWV6b25lRXJyb3IiLCAidGltZXpvbmVzIiwgImNyZWF0ZUFkYXB0ZXJFcnJvciIsICJ0aW1lem9uZSIsICJjcmVhdGVJbnRyb3NwZWN0aW9uIiwgImVycm9yIiwgImRldGFpbHMiLCAicXVlcnkiLCAiZ2V0U2VsZWN0UXVlcnkiLCAicmVzdWx0cyIsICJnZXRJbnNlcnRRdWVyeSIsICJyb3dzIiwgImdldFVwZGF0ZVF1ZXJ5IiwgInJvdyIsICJnZXREZWxldGVRdWVyeSIsICJhcmdzIiwgInJlc3VsdCIsICJzY2hlbWFzIiwgImNvbHVtbnMiLCAidGFibGVOYW1lIiwgInNjaGVtYSIsICJjb2x1bW5zUmVjb3JkIiwgImNvbHVtbiIsICJkYXRhdHlwZSIsICJkYXRhdHlwZV9zY2hlbWEiLCAiY29sdW1uTmFtZSIsICJudWxsYWJsZSIsICJpc0FycmF5IiwgInN0cmlwcGVkRGF0YVR5cGUiLCAiUE9TVEdSRVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBIiwgImZpbHRlck9wZXJhdG9ycyIsICJtb2NrSW50cm9zcGVjdCIsICJtb2NrVGFibGVzUXVlcnkiLCAibW9ja1RpbWV6b25lUXVlcnkiXQp9Cg==