@prisma/studio-core 0.0.0-dev.202505151544 → 0.0.0-dev.202505160133

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.
@@ -0,0 +1,2 @@
1
+ import{A as at,B as N,C as P,a as Q,b as j,c as B,d as V,e as W,f as J,g as m,h as k,i as K,j as G,k as A,l as $,m as y,n as Y,o as H,p as X,q,r as Z,s as tt,t as w,u as C,v as g,w as it,x as et,y as st,z as rt}from"./chunk-OGMDOPWW.js";function c(s){let{error:t,query:i}=s,e=t;return e.query=i,[e]}var nt={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"}};var F=class s{#t;constructor(t){this.#t=m(t)}get expressionType(){}get isRawBuilder(){return!0}as(t){return new M(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?m([...this.#t.plugins,t]):m([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():it;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 v(s){return new F(s)}var M=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 G.create(this.#t.toOperationNode(),A(this.#i)?this.#i.toOperationNode():k.create(this.#i))}};var d=Object.assign((s,...t)=>v({queryId:g(),rawNode:y.create(s,t?.map(pt)??[])}),{ref(s){return v({queryId:g(),rawNode:y.createWithChild(H(s))})},val(s){return v({queryId:g(),rawNode:y.createWithChild(q(s))})},value(s){return this.val(s)},table(s){return v({queryId:g(),rawNode:y.createWithChild(st(s))})},id(...s){let t=new Array(s.length+1).fill(".");return t[0]="",t[t.length-1]="",v({queryId:g(),rawNode:y.create(t,s.map(k.create))})},lit(s){return v({queryId:g(),rawNode:y.createWithChild(X.createImmediate(s))})},literal(s){return this.lit(s)},raw(s){return v({queryId:g(),rawNode:y.createWithSql(s)})},join(s,t=d`, `){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]=pt(s[r]),r!==s.length-1&&(i[2*r+1]=e);return v({queryId:g(),rawNode:y.createWithChildren(i)})}});function pt(s){return A(s)?s.toOperationNode():q(s)}var O=class{nodeStack=[];get parentNode(){return this.nodeStack[this.nodeStack.length-2]}#t=m({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 xt=/'/g,S=class extends O{#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),m({query:t,queryId:i,sql:this.getSql(),parameters:[...this.#i]})}getSql(){return this.#t}visitSelectQuery(t){let i=this.parentNode!==void 0&&!Z.is(this.parentNode)&&!tt.is(this.parentNode)&&!K.is(this.parentNode)&&!rt.is(this.parentNode)&&!et.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(C.is),e=i!==t;!e&&t.explain&&(this.visitNode(t.explain),this.append(" ")),e&&!w.is(i)&&this.append("("),t.with&&(this.visitNode(t.with),this.append(" ")),this.append(t.replace?"replace":"insert"),t.ignore&&(Y("`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&&!w.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(C.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(!Q(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(wt[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(C.is),e=i!==t;if(!e&&t.explain&&(this.visitNode(t.explain),this.append(" ")),e&&!w.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&&!w.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 "),B(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(_t[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 $.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(xt,"''")}addParameter(t){this.#i.push(t)}appendImmediateValue(t){if(Q(t))this.appendStringLiteral(t);else if(j(t)||B(t))this.append(t.toString());else if(V(t))this.append("null");else if(W(t))this.appendImmediateValue(t.toISOString());else if(J(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?ot[i.modifier]-ot[e.modifier]:1),m(t)}compileColumnAlterations(t){this.compileList(t)}announcesNewColumnDataType(){return!0}},_t=m({ForKeyShare:"for key share",ForNoKeyUpdate:"for no key update",ForUpdate:"for update",ForShare:"for share",NoWait:"nowait",SkipLocked:"skip locked",Distinct:"distinct"}),ot=m({ForKeyShare:1,ForNoKeyUpdate:1,ForUpdate:1,ForShare:1,NoWait:2,SkipLocked:2,Distinct:0}),wt=m({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"});var D=class{get supportsCreateIfNotExists(){return!0}get supportsTransactionalDdl(){return!1}get supportsReturning(){return!1}get supportsOutput(){return!1}};var kt=/"/g,T=class extends S{sanitizeIdentifier(t){return t.replace(kt,'""')}};var At=BigInt("3853314791062309107"),I=class extends D{get supportsTransactionalDdl(){return!0}get supportsReturning(){return!0}async acquireMigrationLock(t,i){await d`select pg_advisory_xact_lock(${d.lit(At)})`.execute(t)}async releaseMigrationLock(t,i){}};function b(s){return at({...s,Adapter:I,QueryCompiler:T})}function lt(s,t){let{table:i,rows:e}=s,{name:r,schema:a,columns:n}=i,o=b(t),l=Object.keys(n),p={[l[0]]:d`default`};return N(o.withSchema(a).insertInto(r).values(e.map(f=>Object.keys(f).length===0?p:f)).returning(l).returning(f=>f.cast("ctid","text").as("ctid")))}function dt(s,t){let{pageIndex:i,pageSize:e,sortOrder:r,table:{name:a,schema:n,columns:o},filter:l={kind:"FilterGroup",after:"and",filters:[]}}=s,p=b(t),f=Object.keys(o),R=p.withSchema(n).selectFrom(a).select(h=>h.cast(h.fn.coalesce(h.fn.countAll(),d.lit(0)),"text").as("oid"));return N(p.with("count",()=>R).withSchema(n).selectFrom([a,"count"]).select(d.ref("count.oid").$castTo().as("oid")).select(h=>h.cast("ctid","text").as("ctid")).select(f).$call(h=>r.reduce((x,_)=>x.orderBy(_.column,_.direction),h)).where(ht(l.filters)).limit(e).offset(d.lit(BigInt(i)*BigInt(e))))}function Ct(s){return s.kind==="ColumnFilter"?t=>t(t.ref(s.column),s.operator,s.value):ht(s.filters)}function ht(s){if(s.length===0)return e=>e.lit(!0);let t=[],i=[];for(let e=0;e<s.length;e++)i.push(Ct(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(n=>n(e))));return e.or(r)}}function Qi(){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 ut(s,t){let{changes:i,row:e,table:{columns:r,name:a,schema:n}}=s,o=b(t),l=Object.keys(r);return N(o.withSchema(n).updateTable(a).set(i).$call(P([e],r)).returning(l).returning(p=>[p.cast("ctid","text").as("ctid"),p.cast(p.fn("floor",[p(p.fn("extract",[d`epoch from now()`]),"*",1e6)]),"text").as("__ps_updated_at__")]))}function ct(s,t){let{rows:i,table:{columns:e,name:r,schema:a}}=s,n=b(t);return N(n.withSchema(a).deleteFrom(r).$call(P(i,e)))}function mt(s){return d`(select coalesce(json_agg(agg), '[]') from ${s} as agg)`}var Ot="r",St="v",Dt=[Ot,St];function ft(s){return N(b(s).selectFrom("pg_catalog.pg_class as cls").innerJoin("pg_catalog.pg_namespace as ns","cls.relnamespace","ns.oid").$call(Tt).where("cls.relkind","in",Dt).select(t=>["ns.nspname as schema","cls.relname as name",mt(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")),d`'[]'`).as("options")])).as("columns")]))}function yt(){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 gt(){let s=b();return N(s.selectNoFrom(s.fn("current_setting",[d.lit("timezone")]).as("timezone")))}function vt(){return[{timezone:"UTC"}]}function Tt(s){return s.where("ns.nspname","!~","^pg_").where("ns.nspname","!=","information_schema")}function Hi(s){let{executor:t,...i}=s;return{defaultSchema:"public",async introspect(e){try{let r=ft(i),a=gt(),[[n,o],[l,p]]=await Promise.all([t.execute(r,e),t.execute(a,e)]);if(n)return c({error:n,query:r});if(l)return c({error:l,query:a});let f=p[0]?.timezone;return f?[null,Nt({tables:o,timezone:f,query:r})]:c({error:new Error("Timezone not found"),query:a})}catch(r){return c({error:r})}},async query(e,r){try{let a=dt(e,i),[n,o]=await t.execute(a,r);return n?c({error:n,query:a}):[null,{filteredRowCount:o[0]?.oid||"0",rows:o,query:a}]}catch(a){return c({error:a})}},async insert(e,r){try{let a=lt(e,i),[n,o]=await t.execute(a,r);return n?c({error:n,query:a}):[null,{rows:o,query:a}]}catch(a){return c({error:a})}},async update(e,r){try{let a=ut(e,i),[n,o]=await t.execute(a,r);if(n)return c({error:n,query:a});let[l]=o;return l?[null,{row:l,query:a}]:c({error:new Error("Update failed"),query:a})}catch(a){return c({error:a})}},async delete(e,r){try{let a=ct(e,i),[n]=await t.execute(a,r);return n?c({error:n,query:a}):[null,{...e,query:a}]}catch(a){return c({error:a})}}}}function Nt(s){let{tables:t,timezone:i,query:e}=s;return t.reduce((r,a)=>{let{schemas:n}=r,{columns:o,name:l,schema:p}=a,f=o.reduce((R,h)=>{let{datatype:x,datatype_schema:_,name:z,options:U,nullable:bt}=h,E=x.startsWith("_"),L=E?x.slice(1):x;return{...R,[z]:{datatype:{...nt[L]||{group:U.length>0?"enum":"raw"},isArray:E,isNative:_==="pg_catalog",name:E?`${L}[]`:L,options:U,schema:_},isComputed:h.computed,isInPrimaryKey:h.pk,name:z,nullable:bt,schema:p,table:l,fkSchema:h.foreign_key_schema,fkTable:h.foreign_key_table,fkColumn:h.foreign_key_column}}},{});return n[p]===void 0&&(n[p]={name:p,tables:{}}),n[p].tables[l]={columns:f,name:l,schema:p},r},{schemas:{public:{tables:{},name:"public"}},timezone:i,filterOperators:It,query:e})}var It=["=","!=",">",">=","<","<=","is","is not","like","not like","ilike","not ilike"];function Xi(){let s=yt(),[{timezone:t}]=vt();return Nt({tables:s,timezone:t,query:{parameters:[],sql:"<mocked>"}})}export{lt as a,dt as b,Qi as c,ut as d,ct as e,ft as f,yt as g,gt as h,vt as i,Hi as j,Xi as k};
2
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vZGF0YS9hZGFwdGVyLnRzIiwgIi4uL2RhdGEvcG9zdGdyZXMtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3Jhdy1idWlsZGVyL3Jhdy1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcmF3LWJ1aWxkZXIvc3FsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtdmlzaXRvci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3F1ZXJ5LWNvbXBpbGVyL2RlZmF1bHQtcXVlcnktY29tcGlsZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9kaWFsZWN0L2RpYWxlY3QtYWRhcHRlci1iYXNlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vZGlhbGVjdC9wb3N0Z3Jlcy9wb3N0Z3Jlcy1xdWVyeS1jb21waWxlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2RpYWxlY3QvcG9zdGdyZXMvcG9zdGdyZXMtYWRhcHRlci5qcyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvYnVpbGRlci50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvZG1sLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9wb3N0Z3Jlcy5qcyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvaW50cm9zcGVjdGlvbi50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvYWRhcHRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuaW1wb3J0IHR5cGUgeyBCaWdJbnRTdHJpbmcsIEVpdGhlciwgTnVtZXJpY1N0cmluZyB9IGZyb20gXCIuL3R5cGUtdXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyIHtcbiAgLyoqXG4gICAqIFRoZSBzY2hlbWEgc3R1ZGlvIHdpbGwgY2hvb3NlIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIGUuZy4gYHB1YmxpY2AgZm9yIFBvc3RncmVTUUxcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRTY2hlbWE/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEludHJvc3BlY3RzIHRoZSBkYXRhYmFzZSBhbmQgcmV0dXJucyBzdHJ1Y3R1cmVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzY2hlbWFzLCB0YWJsZXMsIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgaW50cm9zcGVjdGlvbiByZXF1ZXN0LlxuICAgKi9cbiAgaW50cm9zcGVjdChvcHRpb25zOiBBZGFwdGVySW50cm9zcGVjdE9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0Pj47XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgc3RydWN0dXJlZCBxdWVyeSBhZ2FpbnN0IHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIHF1ZXJ5KGRldGFpbHM6IEFkYXB0ZXJRdWVyeURldGFpbHMsIG9wdGlvbnM6IEFkYXB0ZXJRdWVyeU9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJRdWVyeVJlc3VsdD4+O1xuXG4gIC8qKlxuICAgKiBJbnNlcnRzIGEgc2luZ2xlIHJvdyBpbnRvIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIGluc2VydChcbiAgICBkZXRhaWxzOiBBZGFwdGVySW5zZXJ0RGV0YWlscyxcbiAgICBvcHRpb25zOiBBZGFwdGVySW5zZXJ0T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW5zZXJ0UmVzdWx0Pj47XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBnaXZlbiByb3cgaW4gdGhlIGRhdGFiYXNlIHdpdGggZ2l2ZW4gY2hhbmdlcy5cbiAgICovXG4gIHVwZGF0ZShcbiAgICBkZXRhaWxzOiBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgICBvcHRpb25zOiBBZGFwdGVyVXBkYXRlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyVXBkYXRlUmVzdWx0Pj47XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgZ2l2ZW4gcm93cyBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIGRlbGV0ZShcbiAgICBkZXRhaWxzOiBBZGFwdGVyRGVsZXRlRGV0YWlscyxcbiAgICBvcHRpb25zOiBBZGFwdGVyRGVsZXRlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyRGVsZXRlUmVzdWx0Pj47XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckJhc2VPcHRpb25zIHt9XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckludHJvc3BlY3RPcHRpb25zIGV4dGVuZHMgQWRhcHRlckJhc2VPcHRpb25zIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclF1ZXJ5T3B0aW9ucyBleHRlbmRzIEFkYXB0ZXJCYXNlT3B0aW9ucyB7XG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVySW5zZXJ0T3B0aW9ucyBleHRlbmRzIEFkYXB0ZXJCYXNlT3B0aW9ucyB7fVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJVcGRhdGVPcHRpb25zIGV4dGVuZHMgQWRhcHRlckJhc2VPcHRpb25zIHt9XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckRlbGV0ZU9wdGlvbnMgZXh0ZW5kcyBBZGFwdGVyQmFzZU9wdGlvbnMge31cblxudHlwZSBTY2hlbWFOYW1lID0gc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0IHtcbiAgc2NoZW1hczogUmVjb3JkPFNjaGVtYU5hbWUsIFNjaGVtYT47XG4gIHRpbWV6b25lOiBzdHJpbmc7XG4gIGZpbHRlck9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXTtcbiAgcXVlcnk6IFF1ZXJ5O1xufVxuXG50eXBlIFRhYmxlTmFtZSA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWEge1xuICBuYW1lOiBzdHJpbmc7XG4gIHRhYmxlczogUmVjb3JkPFRhYmxlTmFtZSwgVGFibGU+O1xufVxuXG50eXBlIENvbHVtbk5hbWUgPSBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGUge1xuICBjb2x1bW5zOiBSZWNvcmQ8Q29sdW1uTmFtZSwgQ29sdW1uPjtcbiAgbmFtZTogVGFibGVOYW1lO1xuICBzY2hlbWE6IFNjaGVtYU5hbWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uIHtcbiAgZGF0YXR5cGU6IERhdGFUeXBlO1xuICBpc0NvbXB1dGVkOiBib29sZWFuO1xuICBpc0luUHJpbWFyeUtleTogYm9vbGVhbjtcbiAgbmFtZTogQ29sdW1uTmFtZTtcbiAgbnVsbGFibGU6IGJvb2xlYW47XG4gIHNjaGVtYTogU2NoZW1hTmFtZTtcbiAgdGFibGU6IFRhYmxlTmFtZTtcbiAgZmtTY2hlbWE6IFNjaGVtYU5hbWUgfCBudWxsO1xuICBma0NvbHVtbjogQ29sdW1uTmFtZSB8IG51bGw7XG4gIGZrVGFibGU6IFRhYmxlTmFtZSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVR5cGUge1xuICAvKipcbiAgICogQSBzaW1wbGlmaWNhdGlvbi9ub3JtYWxpemF0aW9uIGZvciBVSSB1c2FnZS5cbiAgICpcbiAgICogZS5nLiB2YXJjaGFyIGFuZCBjaGFyIGFyZSBzdHJpbmdzLlxuICAgKi9cbiAgZ3JvdXA6IERhdGFUeXBlR3JvdXA7XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgYSBuYXRpdmUgYXJyYXkgdHlwZT9cbiAgICovXG4gIGlzQXJyYXk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElzIGEgbmF0aXZlIGRhdGFiYXNlIGRhdGF0eXBlIG9yIGEgdXNlci1kZWZpbmVkIGRhdGF0eXBlP1xuICAgKlxuICAgKiBlLmcuIFBvc3RncmVTUUwgZW51bXMgYXJlIHVzZXItZGVmaW5lZCBkYXRhdHlwZXMsIGJ1dCBgaW50NGAgaXMgYSBuYXRpdmUgZGF0YXR5cGUuXG4gICAqL1xuICBpc05hdGl2ZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2lsbCBiZSBkaXNwbGF5ZWQgYXMtaXMuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVudW0gdmFsdWVzIGZvciBlbnVtIHR5cGVzLlxuICAgKi9cbiAgb3B0aW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBzY2hlbWEgdGhlIGRhdGF0eXBlIGJlbG9uZ3MgdG8uXG4gICAqL1xuICBzY2hlbWE6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgRGF0YVR5cGVHcm91cCA9IFwic3RyaW5nXCIgfCBcImRhdGV0aW1lXCIgfCBcImJvb2xlYW5cIiB8IFwiZW51bVwiIHwgXCJ0aW1lXCIgfCBcInJhd1wiIHwgXCJudW1lcmljXCIgfCBcImpzb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyUXVlcnlEZXRhaWxzIHtcbiAgLyoqXG4gICAqIFplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHBhZ2UgdG8gZmV0Y2guXG4gICAqL1xuICBwYWdlSW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBmZXRjaCBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNvcnQgb3JkZXIgZm9yIHRoZSBxdWVyeS5cbiAgICovXG4gIHNvcnRPcmRlcjogU29ydE9yZGVySXRlbVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGUgdG8gc2VsZWN0IGZyb20uXG4gICAqL1xuICB0YWJsZTogVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWx0ZXIgdG8gYmUgYXBwbGllZC5cbiAgICovXG4gIGZpbHRlcj86IEZpbHRlckdyb3VwO1xufVxuXG5leHBvcnQgdHlwZSBGaWx0ZXJPcGVyYXRvciA9XG4gIHwgXCI9XCJcbiAgfCBcIiE9XCJcbiAgfCBcIj5cIlxuICB8IFwiPj1cIlxuICB8IFwiPFwiXG4gIHwgXCI8PVwiXG4gIHwgXCJpc1wiXG4gIHwgXCJpcyBub3RcIlxuICB8IFwibGlrZVwiXG4gIHwgXCJub3QgbGlrZVwiXG4gIHwgXCJpbGlrZVwiXG4gIHwgXCJub3QgaWxpa2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5GaWx0ZXIge1xuICBraW5kOiBcIkNvbHVtbkZpbHRlclwiO1xuICBjb2x1bW46IHN0cmluZztcbiAgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yO1xuICB2YWx1ZTogdW5rbm93bjtcbiAgYWZ0ZXI6IFwiYW5kXCIgfCBcIm9yXCI7XG4gIGlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyR3JvdXAge1xuICBraW5kOiBcIkZpbHRlckdyb3VwXCI7XG4gIGZpbHRlcnM6IChDb2x1bW5GaWx0ZXIgfCBGaWx0ZXJHcm91cClbXTtcbiAgYWZ0ZXI6IFwiYW5kXCIgfCBcIm9yXCI7XG4gIGlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydE9yZGVySXRlbSB7XG4gIC8qKlxuICAgKiBUaGUgY29sdW1uIHRvIHNvcnQgYnkuXG4gICAqL1xuICBjb2x1bW46IENvbHVtbk5hbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3Rpb24gdG8gc29ydCB0aGUgY29sdW1uIGJ5LlxuICAgKi9cbiAgZGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uO1xufVxuXG5leHBvcnQgdHlwZSBTb3J0RGlyZWN0aW9uID0gXCJhc2NcIiB8IFwiZGVzY1wiO1xuXG5leHBvcnQgY2xhc3MgQWRhcHRlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBxdWVyeT86IFF1ZXJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJRdWVyeVJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgdGhlIHF1ZXJ5IHdvdWxkIHJldHVybiBpZiBub3QgbGltaXRlZC5cbiAgICpcbiAgICogSWYgdGhlIGRhdGFiYXNlIGRvZXMgbm90IHN1cHBvcnQgY291bnRpbmcgcm93cywgdGhpcyBzaG91bGQgYmUgc2V0IHRvIGBJbmZpbml0eWAuXG4gICAqL1xuICBmaWx0ZXJlZFJvd0NvdW50OiBudW1iZXIgfCBiaWdpbnQgfCBOdW1lcmljU3RyaW5nIHwgQmlnSW50U3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm93cyByZXR1cm5lZCBieSB0aGUgcXVlcnkuXG4gICAqL1xuICByb3dzOiBSZWNvcmQ8Q29sdW1uTmFtZSwgdW5rbm93bj5bXTtcblxuICAvKipcbiAgICogVGhlIGV4ZWN1dGVkIHF1ZXJ5IHN0cmluZy5cbiAgICovXG4gIHF1ZXJ5OiBRdWVyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVySW5zZXJ0RGV0YWlscyB7XG4gIC8qKlxuICAgKiBUaGUgdGFibGUgdG8gaW5zZXJ0IGludG8uXG4gICAqL1xuICB0YWJsZTogVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZXMgdG8gaW5zZXJ0IGludG8gdGhlIHRhYmxlLlxuICAgKiAtIFRoZSBrZXlzIHNob3VsZCBtYXRjaCB0aGUgY29sdW1uIG5hbWVzIGluIHRoZSB0YWJsZS5cbiAgICogLSBUaGUgdmFsdWVzIHNob3VsZCBiZSB0aGUgdmFsdWVzIHRvIGluc2VydCBpbnRvIHRoZSB0YWJsZS5cbiAgICovXG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckluc2VydFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZnJlc2hseSBpbnNlcnRlZCByb3cgZGF0YS5cbiAgICovXG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRlZCBxdWVyeSBzdHJpbmcuXG4gICAqL1xuICBxdWVyeTogUXVlcnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclVwZGF0ZURldGFpbHMge1xuICAvKipcbiAgICogQ2hhbmdlcyB0byBhcHBseSB0byB0aGUgcm93LlxuICAgKi9cbiAgY2hhbmdlczogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBUaGUgcm93IHRvIHVwZGF0ZS5cbiAgICovXG4gIHJvdzogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGUgdG8gdXBkYXRlIGluLlxuICAgKi9cbiAgdGFibGU6IFRhYmxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJVcGRhdGVSZXN1bHQge1xuICAvKipcbiAgICogVGhlIHVwZGF0ZWQgcm93IGRhdGEuXG4gICAqL1xuICByb3c6IFJlY29yZDxDb2x1bW5OYW1lLCB1bmtub3duPiAmIHtcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoZSBjaGFuZ2VzIHdlcmUgYXBwbGllZCBpbiBkYXRhYmFzZSB0aW1lLlxuICAgICAqL1xuICAgIF9fcHNfdXBkYXRlZF9hdF9fOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0ZWQgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgcXVlcnk6IFF1ZXJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJEZWxldGVEZXRhaWxzIHtcbiAgLyoqXG4gICAqIFRoZSByb3dzIHRvIGRlbGV0ZS5cbiAgICovXG4gIHJvd3M6IFJlY29yZDxDb2x1bW5OYW1lLCB1bmtub3duPltdO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGUgdG8gZGVsZXRlIGZyb20uXG4gICAqL1xuICB0YWJsZTogVGFibGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckRlbGV0ZVJlc3VsdCB7XG4gIHJvd3M6IFJlY29yZDxDb2x1bW5OYW1lLCB1bmtub3duPltdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0ZWQgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgcXVlcnk6IFF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWRhcHRlckVycm9yKGFyZ3M6IHsgZXJyb3I6IEVycm9yOyBxdWVyeT86IFF1ZXJ5IH0pIHtcbiAgY29uc3QgeyBlcnJvciwgcXVlcnkgfSA9IGFyZ3M7XG5cbiAgY29uc3QgYWRhcHRlckVycm9yID0gZXJyb3IgYXMgQWRhcHRlckVycm9yO1xuXG4gIGFkYXB0ZXJFcnJvci5xdWVyeSA9IHF1ZXJ5O1xuXG4gIHJldHVybiBbYWRhcHRlckVycm9yXSBhcyBbQWRhcHRlckVycm9yXTtcbn1cbiIsICJpbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCBjb25zdCBQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEE6IFJlY29yZDxzdHJpbmcsIFBpY2s8RGF0YVR5cGUsIFwiZ3JvdXBcIj4+ID0ge1xuICBib29sOiB7XG4gICAgZ3JvdXA6IFwiYm9vbGVhblwiLFxuICB9LFxuICBib29sZWFuOiB7XG4gICAgZ3JvdXA6IFwiYm9vbGVhblwiLFxuICB9LFxuICBieXRlYToge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGNpdGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICAvKipcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQnXG4gICAqL1xuICBkYXRlOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIEBleGFtcGxlICcxIGRheSAyIGhvdXJzJ1xuICAgKi9cbiAgaW50ZXJ2YWw6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbmFtZToge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB2YXJjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgLyoqXG4gICAqIHNob3J0IGZvcm0gb2YgYHRpbWUgd2l0aG91dCB0aW1lIHpvbmVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMTQ6MzA6MDAnXG4gICAqL1xuICB0aW1lOiB7XG4gICAgZ3JvdXA6IFwidGltZVwiLFxuICB9LFxuICAvKipcbiAgICogc2hvcnQgZm9ybSBvZiBgdGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDAnXG4gICAqL1xuICB0aW1lc3RhbXA6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICAvKipcbiAgICogc2hvcnQgZm9ybSBvZiBgdGltZXN0YW1wIHdpdGggdGltZSB6b25lYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDArMDAnXG4gICAqL1xuICB0aW1lc3RhbXB0ejoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBsb25nIGZvcm0gb2YgYHRpbWVzdGFtcGAuXG4gICAqXG4gICAqIEBleGFtcGxlICcyMDI1LTA0LTE0IDE0OjMwOjAwJ1xuICAgKi9cbiAgXCJ0aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmVcIjoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBsb25nIGZvcm0gb2YgYHRpbWVzdGFtcHR6YC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDArMDAnXG4gICAqL1xuICBcInRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZVwiOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIHNob3J0IGZvcm0gb2YgYHRpbWUgd2l0aCB0aW1lIHpvbmVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMTQ6MzA6MDArMDA6MDAnXG4gICAqL1xuICB0aW1ldHo6IHtcbiAgICBncm91cDogXCJ0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBsb25nIGZvcm0gb2YgYHRpbWVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMTQ6MzA6MDAnXG4gICAqL1xuICBcInRpbWUgd2l0aG91dCB0aW1lIHpvbmVcIjoge1xuICAgIGdyb3VwOiBcInRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIGxvbmcgZm9ybSBvZiBgdGltZXR6YC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDArMDAnXG4gICAqL1xuICBcInRpbWUgd2l0aCB0aW1lIHpvbmVcIjoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIHV1aWQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgLy8gTnVtZXJpYyB0eXBlc1xuICBpbnQyOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBpbnQ0OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBpbnQ4OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBzbWFsbGludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgaW50ZWdlcjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgYmlnaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBkZWNpbWFsOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBudW1lcmljOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICByZWFsOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBmbG9hdDQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGZsb2F0ODoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgXCJkb3VibGUgcHJlY2lzaW9uXCI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGpzb246IHtcbiAgICBncm91cDogXCJqc29uXCIsXG4gIH0sXG4gIGpzb25iOiB7XG4gICAgZ3JvdXA6IFwianNvblwiLFxuICB9LFxufTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcmF3LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBBbGlhc05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hbGlhcy1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IE5PT1BfUVVFUllfRVhFQ1VUT1IgfSBmcm9tICcuLi9xdWVyeS1leGVjdXRvci9ub29wLXF1ZXJ5LWV4ZWN1dG9yLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IGlzT3BlcmF0aW9uTm9kZVNvdXJjZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXNvdXJjZS5qcyc7XG5jbGFzcyBSYXdCdWlsZGVySW1wbCB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgZ2V0IGV4cHJlc3Npb25UeXBlKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgaXNSYXdCdWlsZGVyKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbGlhc2VkUmF3QnVpbGRlckltcGwodGhpcywgYWxpYXMpO1xuICAgIH1cbiAgICAkY2FzdFRvKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJhd0J1aWxkZXJJbXBsKHsgLi4udGhpcy4jcHJvcHMgfSk7XG4gICAgfVxuICAgICRub3ROdWxsKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJhd0J1aWxkZXJJbXBsKHRoaXMuI3Byb3BzKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYXdCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHBsdWdpbnM6IHRoaXMuI3Byb3BzLnBsdWdpbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZnJlZXplKFsuLi50aGlzLiNwcm9wcy5wbHVnaW5zLCBwbHVnaW5dKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKFtwbHVnaW5dKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RvT3BlcmF0aW9uTm9kZSh0aGlzLiNnZXRFeGVjdXRvcigpKTtcbiAgICB9XG4gICAgY29tcGlsZShleGVjdXRvclByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjb21waWxlKHRoaXMuI2dldEV4ZWN1dG9yKGV4ZWN1dG9yUHJvdmlkZXIpKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZShleGVjdXRvclByb3ZpZGVyKSB7XG4gICAgICAgIGNvbnN0IGV4ZWN1dG9yID0gdGhpcy4jZ2V0RXhlY3V0b3IoZXhlY3V0b3JQcm92aWRlcik7XG4gICAgICAgIHJldHVybiBleGVjdXRvci5leGVjdXRlUXVlcnkodGhpcy4jY29tcGlsZShleGVjdXRvciksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICAjZ2V0RXhlY3V0b3IoZXhlY3V0b3JQcm92aWRlcikge1xuICAgICAgICBjb25zdCBleGVjdXRvciA9IGV4ZWN1dG9yUHJvdmlkZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBleGVjdXRvclByb3ZpZGVyLmdldEV4ZWN1dG9yKClcbiAgICAgICAgICAgIDogTk9PUF9RVUVSWV9FWEVDVVRPUjtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLnBsdWdpbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBleGVjdXRvci53aXRoUGx1Z2lucyh0aGlzLiNwcm9wcy5wbHVnaW5zKVxuICAgICAgICAgICAgOiBleGVjdXRvcjtcbiAgICB9XG4gICAgI3RvT3BlcmF0aW9uTm9kZShleGVjdXRvcikge1xuICAgICAgICByZXR1cm4gZXhlY3V0b3IudHJhbnNmb3JtUXVlcnkodGhpcy4jcHJvcHMucmF3Tm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgICNjb21waWxlKGV4ZWN1dG9yKSB7XG4gICAgICAgIHJldHVybiBleGVjdXRvci5jb21waWxlUXVlcnkodGhpcy4jdG9PcGVyYXRpb25Ob2RlKGV4ZWN1dG9yKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJhd0J1aWxkZXIocHJvcHMpIHtcbiAgICByZXR1cm4gbmV3IFJhd0J1aWxkZXJJbXBsKHByb3BzKTtcbn1cbmNsYXNzIEFsaWFzZWRSYXdCdWlsZGVySW1wbCB7XG4gICAgI3Jhd0J1aWxkZXI7XG4gICAgI2FsaWFzO1xuICAgIGNvbnN0cnVjdG9yKHJhd0J1aWxkZXIsIGFsaWFzKSB7XG4gICAgICAgIHRoaXMuI3Jhd0J1aWxkZXIgPSByYXdCdWlsZGVyO1xuICAgICAgICB0aGlzLiNhbGlhcyA9IGFsaWFzO1xuICAgIH1cbiAgICBnZXQgZXhwcmVzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Jhd0J1aWxkZXI7XG4gICAgfVxuICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2FsaWFzO1xuICAgIH1cbiAgICBnZXQgcmF3QnVpbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Jhd0J1aWxkZXI7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIEFsaWFzTm9kZS5jcmVhdGUodGhpcy4jcmF3QnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSwgaXNPcGVyYXRpb25Ob2RlU291cmNlKHRoaXMuI2FsaWFzKVxuICAgICAgICAgICAgPyB0aGlzLiNhbGlhcy50b09wZXJhdGlvbk5vZGUoKVxuICAgICAgICAgICAgOiBJZGVudGlmaWVyTm9kZS5jcmVhdGUodGhpcy4jYWxpYXMpKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NxbC5kLnRzXCIgLz5cbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IGlzT3BlcmF0aW9uTm9kZVNvdXJjZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXNvdXJjZS5qcyc7XG5pbXBvcnQgeyBSYXdOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcmF3LW5vZGUuanMnO1xuaW1wb3J0IHsgVmFsdWVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvdmFsdWUtbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVN0cmluZ1JlZmVyZW5jZSB9IGZyb20gJy4uL3BhcnNlci9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGUgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVFeHByZXNzaW9uIH0gZnJvbSAnLi4vcGFyc2VyL3ZhbHVlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVRdWVyeUlkIH0gZnJvbSAnLi4vdXRpbC9xdWVyeS1pZC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSYXdCdWlsZGVyIH0gZnJvbSAnLi9yYXctYnVpbGRlci5qcyc7XG5leHBvcnQgY29uc3Qgc3FsID0gT2JqZWN0LmFzc2lnbigoc3FsRnJhZ21lbnRzLCAuLi5wYXJhbWV0ZXJzKSA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZVJhd0J1aWxkZXIoe1xuICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgIHJhd05vZGU6IFJhd05vZGUuY3JlYXRlKHNxbEZyYWdtZW50cywgcGFyYW1ldGVycz8ubWFwKHBhcnNlUGFyYW1ldGVyKSA/PyBbXSksXG4gICAgfSk7XG59LCB7XG4gICAgcmVmKGNvbHVtblJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhDaGlsZChwYXJzZVN0cmluZ1JlZmVyZW5jZShjb2x1bW5SZWZlcmVuY2UpKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICB2YWwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJhd0J1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgcmF3Tm9kZTogUmF3Tm9kZS5jcmVhdGVXaXRoQ2hpbGQocGFyc2VWYWx1ZUV4cHJlc3Npb24odmFsdWUpKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWwodmFsdWUpO1xuICAgIH0sXG4gICAgdGFibGUodGFibGVSZWZlcmVuY2UpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJhd0J1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgcmF3Tm9kZTogUmF3Tm9kZS5jcmVhdGVXaXRoQ2hpbGQocGFyc2VUYWJsZSh0YWJsZVJlZmVyZW5jZSkpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGlkKC4uLmlkcykge1xuICAgICAgICBjb25zdCBmcmFnbWVudHMgPSBuZXcgQXJyYXkoaWRzLmxlbmd0aCArIDEpLmZpbGwoJy4nKTtcbiAgICAgICAgZnJhZ21lbnRzWzBdID0gJyc7XG4gICAgICAgIGZyYWdtZW50c1tmcmFnbWVudHMubGVuZ3RoIC0gMV0gPSAnJztcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJhd0J1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgcmF3Tm9kZTogUmF3Tm9kZS5jcmVhdGUoZnJhZ21lbnRzLCBpZHMubWFwKElkZW50aWZpZXJOb2RlLmNyZWF0ZSkpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGxpdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhDaGlsZChWYWx1ZU5vZGUuY3JlYXRlSW1tZWRpYXRlKHZhbHVlKSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgbGl0ZXJhbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5saXQodmFsdWUpO1xuICAgIH0sXG4gICAgcmF3KHNxbCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhTcWwoc3FsKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBqb2luKGFycmF5LCBzZXBhcmF0b3IgPSBzcWwgYCwgYCkge1xuICAgICAgICBjb25zdCBub2RlcyA9IG5ldyBBcnJheShNYXRoLm1heCgyICogYXJyYXkubGVuZ3RoIC0gMSwgMCkpO1xuICAgICAgICBjb25zdCBzZXAgPSBzZXBhcmF0b3IudG9PcGVyYXRpb25Ob2RlKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIG5vZGVzWzIgKiBpXSA9IHBhcnNlUGFyYW1ldGVyKGFycmF5W2ldKTtcbiAgICAgICAgICAgIGlmIChpICE9PSBhcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgbm9kZXNbMiAqIGkgKyAxXSA9IHNlcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhDaGlsZHJlbihub2RlcyksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbmZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVyKHBhcmFtKSB7XG4gICAgaWYgKGlzT3BlcmF0aW9uTm9kZVNvdXJjZShwYXJhbSkpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtLnRvT3BlcmF0aW9uTm9kZSgpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VWYWx1ZUV4cHJlc3Npb24ocGFyYW0pO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vcGVyYXRpb24tbm9kZS12aXNpdG9yLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbk5vZGVWaXNpdG9yIHtcbiAgICBub2RlU3RhY2sgPSBbXTtcbiAgICBnZXQgcGFyZW50Tm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZVN0YWNrW3RoaXMubm9kZVN0YWNrLmxlbmd0aCAtIDJdO1xuICAgIH1cbiAgICAjdmlzaXRvcnMgPSBmcmVlemUoe1xuICAgICAgICBBbGlhc05vZGU6IHRoaXMudmlzaXRBbGlhcy5iaW5kKHRoaXMpLFxuICAgICAgICBDb2x1bW5Ob2RlOiB0aGlzLnZpc2l0Q29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIElkZW50aWZpZXJOb2RlOiB0aGlzLnZpc2l0SWRlbnRpZmllci5iaW5kKHRoaXMpLFxuICAgICAgICBTY2hlbWFibGVJZGVudGlmaWVyTm9kZTogdGhpcy52aXNpdFNjaGVtYWJsZUlkZW50aWZpZXIuYmluZCh0aGlzKSxcbiAgICAgICAgUmF3Tm9kZTogdGhpcy52aXNpdFJhdy5iaW5kKHRoaXMpLFxuICAgICAgICBSZWZlcmVuY2VOb2RlOiB0aGlzLnZpc2l0UmVmZXJlbmNlLmJpbmQodGhpcyksXG4gICAgICAgIFNlbGVjdFF1ZXJ5Tm9kZTogdGhpcy52aXNpdFNlbGVjdFF1ZXJ5LmJpbmQodGhpcyksXG4gICAgICAgIFNlbGVjdGlvbk5vZGU6IHRoaXMudmlzaXRTZWxlY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgVGFibGVOb2RlOiB0aGlzLnZpc2l0VGFibGUuYmluZCh0aGlzKSxcbiAgICAgICAgRnJvbU5vZGU6IHRoaXMudmlzaXRGcm9tLmJpbmQodGhpcyksXG4gICAgICAgIFNlbGVjdEFsbE5vZGU6IHRoaXMudmlzaXRTZWxlY3RBbGwuYmluZCh0aGlzKSxcbiAgICAgICAgQW5kTm9kZTogdGhpcy52aXNpdEFuZC5iaW5kKHRoaXMpLFxuICAgICAgICBPck5vZGU6IHRoaXMudmlzaXRPci5iaW5kKHRoaXMpLFxuICAgICAgICBWYWx1ZU5vZGU6IHRoaXMudmlzaXRWYWx1ZS5iaW5kKHRoaXMpLFxuICAgICAgICBWYWx1ZUxpc3ROb2RlOiB0aGlzLnZpc2l0VmFsdWVMaXN0LmJpbmQodGhpcyksXG4gICAgICAgIFByaW1pdGl2ZVZhbHVlTGlzdE5vZGU6IHRoaXMudmlzaXRQcmltaXRpdmVWYWx1ZUxpc3QuYmluZCh0aGlzKSxcbiAgICAgICAgUGFyZW5zTm9kZTogdGhpcy52aXNpdFBhcmVucy5iaW5kKHRoaXMpLFxuICAgICAgICBKb2luTm9kZTogdGhpcy52aXNpdEpvaW4uYmluZCh0aGlzKSxcbiAgICAgICAgT3BlcmF0b3JOb2RlOiB0aGlzLnZpc2l0T3BlcmF0b3IuYmluZCh0aGlzKSxcbiAgICAgICAgV2hlcmVOb2RlOiB0aGlzLnZpc2l0V2hlcmUuYmluZCh0aGlzKSxcbiAgICAgICAgSW5zZXJ0UXVlcnlOb2RlOiB0aGlzLnZpc2l0SW5zZXJ0UXVlcnkuYmluZCh0aGlzKSxcbiAgICAgICAgRGVsZXRlUXVlcnlOb2RlOiB0aGlzLnZpc2l0RGVsZXRlUXVlcnkuYmluZCh0aGlzKSxcbiAgICAgICAgUmV0dXJuaW5nTm9kZTogdGhpcy52aXNpdFJldHVybmluZy5iaW5kKHRoaXMpLFxuICAgICAgICBDcmVhdGVUYWJsZU5vZGU6IHRoaXMudmlzaXRDcmVhdGVUYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICBBZGRDb2x1bW5Ob2RlOiB0aGlzLnZpc2l0QWRkQ29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIENvbHVtbkRlZmluaXRpb25Ob2RlOiB0aGlzLnZpc2l0Q29sdW1uRGVmaW5pdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wVGFibGVOb2RlOiB0aGlzLnZpc2l0RHJvcFRhYmxlLmJpbmQodGhpcyksXG4gICAgICAgIERhdGFUeXBlTm9kZTogdGhpcy52aXNpdERhdGFUeXBlLmJpbmQodGhpcyksXG4gICAgICAgIE9yZGVyQnlOb2RlOiB0aGlzLnZpc2l0T3JkZXJCeS5iaW5kKHRoaXMpLFxuICAgICAgICBPcmRlckJ5SXRlbU5vZGU6IHRoaXMudmlzaXRPcmRlckJ5SXRlbS5iaW5kKHRoaXMpLFxuICAgICAgICBHcm91cEJ5Tm9kZTogdGhpcy52aXNpdEdyb3VwQnkuYmluZCh0aGlzKSxcbiAgICAgICAgR3JvdXBCeUl0ZW1Ob2RlOiB0aGlzLnZpc2l0R3JvdXBCeUl0ZW0uYmluZCh0aGlzKSxcbiAgICAgICAgVXBkYXRlUXVlcnlOb2RlOiB0aGlzLnZpc2l0VXBkYXRlUXVlcnkuYmluZCh0aGlzKSxcbiAgICAgICAgQ29sdW1uVXBkYXRlTm9kZTogdGhpcy52aXNpdENvbHVtblVwZGF0ZS5iaW5kKHRoaXMpLFxuICAgICAgICBMaW1pdE5vZGU6IHRoaXMudmlzaXRMaW1pdC5iaW5kKHRoaXMpLFxuICAgICAgICBPZmZzZXROb2RlOiB0aGlzLnZpc2l0T2Zmc2V0LmJpbmQodGhpcyksXG4gICAgICAgIE9uQ29uZmxpY3ROb2RlOiB0aGlzLnZpc2l0T25Db25mbGljdC5iaW5kKHRoaXMpLFxuICAgICAgICBPbkR1cGxpY2F0ZUtleU5vZGU6IHRoaXMudmlzaXRPbkR1cGxpY2F0ZUtleS5iaW5kKHRoaXMpLFxuICAgICAgICBDcmVhdGVJbmRleE5vZGU6IHRoaXMudmlzaXRDcmVhdGVJbmRleC5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wSW5kZXhOb2RlOiB0aGlzLnZpc2l0RHJvcEluZGV4LmJpbmQodGhpcyksXG4gICAgICAgIExpc3ROb2RlOiB0aGlzLnZpc2l0TGlzdC5iaW5kKHRoaXMpLFxuICAgICAgICBQcmltYXJ5S2V5Q29uc3RyYWludE5vZGU6IHRoaXMudmlzaXRQcmltYXJ5S2V5Q29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBVbmlxdWVDb25zdHJhaW50Tm9kZTogdGhpcy52aXNpdFVuaXF1ZUNvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgUmVmZXJlbmNlc05vZGU6IHRoaXMudmlzaXRSZWZlcmVuY2VzLmJpbmQodGhpcyksXG4gICAgICAgIENoZWNrQ29uc3RyYWludE5vZGU6IHRoaXMudmlzaXRDaGVja0NvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgV2l0aE5vZGU6IHRoaXMudmlzaXRXaXRoLmJpbmQodGhpcyksXG4gICAgICAgIENvbW1vblRhYmxlRXhwcmVzc2lvbk5vZGU6IHRoaXMudmlzaXRDb21tb25UYWJsZUV4cHJlc3Npb24uYmluZCh0aGlzKSxcbiAgICAgICAgQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZU5vZGU6IHRoaXMudmlzaXRDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lLmJpbmQodGhpcyksXG4gICAgICAgIEhhdmluZ05vZGU6IHRoaXMudmlzaXRIYXZpbmcuYmluZCh0aGlzKSxcbiAgICAgICAgQ3JlYXRlU2NoZW1hTm9kZTogdGhpcy52aXNpdENyZWF0ZVNjaGVtYS5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wU2NoZW1hTm9kZTogdGhpcy52aXNpdERyb3BTY2hlbWEuYmluZCh0aGlzKSxcbiAgICAgICAgQWx0ZXJUYWJsZU5vZGU6IHRoaXMudmlzaXRBbHRlclRhYmxlLmJpbmQodGhpcyksXG4gICAgICAgIERyb3BDb2x1bW5Ob2RlOiB0aGlzLnZpc2l0RHJvcENvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBSZW5hbWVDb2x1bW5Ob2RlOiB0aGlzLnZpc2l0UmVuYW1lQ29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIEFsdGVyQ29sdW1uTm9kZTogdGhpcy52aXNpdEFsdGVyQ29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIE1vZGlmeUNvbHVtbk5vZGU6IHRoaXMudmlzaXRNb2RpZnlDb2x1bW4uYmluZCh0aGlzKSxcbiAgICAgICAgQWRkQ29uc3RyYWludE5vZGU6IHRoaXMudmlzaXRBZGRDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIERyb3BDb25zdHJhaW50Tm9kZTogdGhpcy52aXNpdERyb3BDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIFJlbmFtZUNvbnN0cmFpbnROb2RlOiB0aGlzLnZpc2l0UmVuYW1lQ29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBGb3JlaWduS2V5Q29uc3RyYWludE5vZGU6IHRoaXMudmlzaXRGb3JlaWduS2V5Q29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBDcmVhdGVWaWV3Tm9kZTogdGhpcy52aXNpdENyZWF0ZVZpZXcuYmluZCh0aGlzKSxcbiAgICAgICAgUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlOiB0aGlzLnZpc2l0UmVmcmVzaE1hdGVyaWFsaXplZFZpZXcuYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcFZpZXdOb2RlOiB0aGlzLnZpc2l0RHJvcFZpZXcuYmluZCh0aGlzKSxcbiAgICAgICAgR2VuZXJhdGVkTm9kZTogdGhpcy52aXNpdEdlbmVyYXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICBEZWZhdWx0VmFsdWVOb2RlOiB0aGlzLnZpc2l0RGVmYXVsdFZhbHVlLmJpbmQodGhpcyksXG4gICAgICAgIE9uTm9kZTogdGhpcy52aXNpdE9uLmJpbmQodGhpcyksXG4gICAgICAgIFZhbHVlc05vZGU6IHRoaXMudmlzaXRWYWx1ZXMuYmluZCh0aGlzKSxcbiAgICAgICAgU2VsZWN0TW9kaWZpZXJOb2RlOiB0aGlzLnZpc2l0U2VsZWN0TW9kaWZpZXIuYmluZCh0aGlzKSxcbiAgICAgICAgQ3JlYXRlVHlwZU5vZGU6IHRoaXMudmlzaXRDcmVhdGVUeXBlLmJpbmQodGhpcyksXG4gICAgICAgIERyb3BUeXBlTm9kZTogdGhpcy52aXNpdERyb3BUeXBlLmJpbmQodGhpcyksXG4gICAgICAgIEV4cGxhaW5Ob2RlOiB0aGlzLnZpc2l0RXhwbGFpbi5iaW5kKHRoaXMpLFxuICAgICAgICBEZWZhdWx0SW5zZXJ0VmFsdWVOb2RlOiB0aGlzLnZpc2l0RGVmYXVsdEluc2VydFZhbHVlLmJpbmQodGhpcyksXG4gICAgICAgIEFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZTogdGhpcy52aXNpdEFnZ3JlZ2F0ZUZ1bmN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIE92ZXJOb2RlOiB0aGlzLnZpc2l0T3Zlci5iaW5kKHRoaXMpLFxuICAgICAgICBQYXJ0aXRpb25CeU5vZGU6IHRoaXMudmlzaXRQYXJ0aXRpb25CeS5iaW5kKHRoaXMpLFxuICAgICAgICBQYXJ0aXRpb25CeUl0ZW1Ob2RlOiB0aGlzLnZpc2l0UGFydGl0aW9uQnlJdGVtLmJpbmQodGhpcyksXG4gICAgICAgIFNldE9wZXJhdGlvbk5vZGU6IHRoaXMudmlzaXRTZXRPcGVyYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgQmluYXJ5T3BlcmF0aW9uTm9kZTogdGhpcy52aXNpdEJpbmFyeU9wZXJhdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBVbmFyeU9wZXJhdGlvbk5vZGU6IHRoaXMudmlzaXRVbmFyeU9wZXJhdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBVc2luZ05vZGU6IHRoaXMudmlzaXRVc2luZy5iaW5kKHRoaXMpLFxuICAgICAgICBGdW5jdGlvbk5vZGU6IHRoaXMudmlzaXRGdW5jdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBDYXNlTm9kZTogdGhpcy52aXNpdENhc2UuYmluZCh0aGlzKSxcbiAgICAgICAgV2hlbk5vZGU6IHRoaXMudmlzaXRXaGVuLmJpbmQodGhpcyksXG4gICAgICAgIEpTT05SZWZlcmVuY2VOb2RlOiB0aGlzLnZpc2l0SlNPTlJlZmVyZW5jZS5iaW5kKHRoaXMpLFxuICAgICAgICBKU09OUGF0aE5vZGU6IHRoaXMudmlzaXRKU09OUGF0aC5iaW5kKHRoaXMpLFxuICAgICAgICBKU09OUGF0aExlZ05vZGU6IHRoaXMudmlzaXRKU09OUGF0aExlZy5iaW5kKHRoaXMpLFxuICAgICAgICBKU09OT3BlcmF0b3JDaGFpbk5vZGU6IHRoaXMudmlzaXRKU09OT3BlcmF0b3JDaGFpbi5iaW5kKHRoaXMpLFxuICAgICAgICBUdXBsZU5vZGU6IHRoaXMudmlzaXRUdXBsZS5iaW5kKHRoaXMpLFxuICAgICAgICBNZXJnZVF1ZXJ5Tm9kZTogdGhpcy52aXNpdE1lcmdlUXVlcnkuYmluZCh0aGlzKSxcbiAgICAgICAgTWF0Y2hlZE5vZGU6IHRoaXMudmlzaXRNYXRjaGVkLmJpbmQodGhpcyksXG4gICAgICAgIEFkZEluZGV4Tm9kZTogdGhpcy52aXNpdEFkZEluZGV4LmJpbmQodGhpcyksXG4gICAgICAgIENhc3ROb2RlOiB0aGlzLnZpc2l0Q2FzdC5iaW5kKHRoaXMpLFxuICAgICAgICBGZXRjaE5vZGU6IHRoaXMudmlzaXRGZXRjaC5iaW5kKHRoaXMpLFxuICAgICAgICBUb3BOb2RlOiB0aGlzLnZpc2l0VG9wLmJpbmQodGhpcyksXG4gICAgICAgIE91dHB1dE5vZGU6IHRoaXMudmlzaXRPdXRwdXQuYmluZCh0aGlzKSxcbiAgICAgICAgT3JBY3Rpb25Ob2RlOiB0aGlzLnZpc2l0T3JBY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgQ29sbGF0ZU5vZGU6IHRoaXMudmlzaXRDb2xsYXRlLmJpbmQodGhpcyksXG4gICAgfSk7XG4gICAgdmlzaXROb2RlID0gKG5vZGUpID0+IHtcbiAgICAgICAgdGhpcy5ub2RlU3RhY2sucHVzaChub2RlKTtcbiAgICAgICAgdGhpcy4jdmlzaXRvcnNbbm9kZS5raW5kXShub2RlKTtcbiAgICAgICAgdGhpcy5ub2RlU3RhY2sucG9wKCk7XG4gICAgfTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZGVmYXVsdC1xdWVyeS1jb21waWxlci5kLnRzXCIgLz5cbmltcG9ydCB7IENyZWF0ZVRhYmxlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS10YWJsZS1ub2RlLmpzJztcbmltcG9ydCB7IEluc2VydFF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2luc2VydC1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IE9wZXJhdGlvbk5vZGVWaXNpdG9yIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtdmlzaXRvci5qcyc7XG5pbXBvcnQgeyBPcGVyYXRvck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vcGVyYXRvci1ub2RlLmpzJztcbmltcG9ydCB7IFBhcmVuc05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9wYXJlbnMtbm9kZS5qcyc7XG5pbXBvcnQgeyBRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSwgaXNTdHJpbmcsIGlzTnVtYmVyLCBpc0Jvb2xlYW4sIGlzTnVsbCwgaXNEYXRlLCBpc0JpZ0ludCwgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBDcmVhdGVWaWV3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS12aWV3LW5vZGUuanMnO1xuaW1wb3J0IHsgU2V0T3BlcmF0aW9uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3NldC1vcGVyYXRpb24tbm9kZS5qcyc7XG5pbXBvcnQgeyBNZXJnZVF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL21lcmdlLXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgbG9nT25jZSB9IGZyb20gJy4uL3V0aWwvbG9nLW9uY2UuanMnO1xuY29uc3QgTElUX1dSQVBfUkVHRVggPSAvJy9nO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRRdWVyeUNvbXBpbGVyIGV4dGVuZHMgT3BlcmF0aW9uTm9kZVZpc2l0b3Ige1xuICAgICNzcWwgPSAnJztcbiAgICAjcGFyYW1ldGVycyA9IFtdO1xuICAgIGdldCBudW1QYXJhbWV0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFyYW1ldGVycy5sZW5ndGg7XG4gICAgfVxuICAgIGNvbXBpbGVRdWVyeShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHRoaXMuI3NxbCA9ICcnO1xuICAgICAgICB0aGlzLiNwYXJhbWV0ZXJzID0gW107XG4gICAgICAgIHRoaXMubm9kZVN0YWNrLnNwbGljZSgwLCB0aGlzLm5vZGVTdGFjay5sZW5ndGgpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlKTtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBxdWVyeTogbm9kZSxcbiAgICAgICAgICAgIHF1ZXJ5SWQsXG4gICAgICAgICAgICBzcWw6IHRoaXMuZ2V0U3FsKCksXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiBbLi4udGhpcy4jcGFyYW1ldGVyc10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRTcWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNzcWw7XG4gICAgfVxuICAgIHZpc2l0U2VsZWN0UXVlcnkobm9kZSkge1xuICAgICAgICBjb25zdCB3cmFwSW5QYXJlbnMgPSB0aGlzLnBhcmVudE5vZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgIVBhcmVuc05vZGUuaXModGhpcy5wYXJlbnROb2RlKSAmJlxuICAgICAgICAgICAgIUluc2VydFF1ZXJ5Tm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpICYmXG4gICAgICAgICAgICAhQ3JlYXRlVGFibGVOb2RlLmlzKHRoaXMucGFyZW50Tm9kZSkgJiZcbiAgICAgICAgICAgICFDcmVhdGVWaWV3Tm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpICYmXG4gICAgICAgICAgICAhU2V0T3BlcmF0aW9uTm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlID09PSB1bmRlZmluZWQgJiYgbm9kZS5leHBsYWluKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cGxhaW4pO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod3JhcEluUGFyZW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndpdGgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2l0aCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdzZWxlY3QnKTtcbiAgICAgICAgaWYgKG5vZGUuZGlzdGluY3RPbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZURpc3RpbmN0T24obm9kZS5kaXN0aW5jdE9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5mcm9udE1vZGlmaWVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmZyb250TW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnRvcCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudG9wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5zZWxlY3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnNlbGVjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmZyb20pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmpvaW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmpvaW5zLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndoZXJlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aGVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZ3JvdXBCeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZ3JvdXBCeSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuaGF2aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5oYXZpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnNldE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuc2V0T3BlcmF0aW9ucywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vcmRlckJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcmRlckJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5saW1pdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9mZnNldCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5mZXRjaCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZmV0Y2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmVuZE1vZGlmaWVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdCh0aGlzLnNvcnRTZWxlY3RNb2RpZmllcnMoWy4uLm5vZGUuZW5kTW9kaWZpZXJzXSksICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdyYXBJblBhcmVucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdEZyb20obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZnJvbSAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmZyb21zKTtcbiAgICB9XG4gICAgdmlzaXRTZWxlY3Rpb24obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnNlbGVjdGlvbik7XG4gICAgfVxuICAgIHZpc2l0Q29sdW1uKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2x1bW4pO1xuICAgIH1cbiAgICBjb21waWxlRGlzdGluY3RPbihleHByZXNzaW9ucykge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZGlzdGluY3Qgb24gKCcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KGV4cHJlc3Npb25zKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgY29tcGlsZUxpc3Qobm9kZXMsIHNlcGFyYXRvciA9ICcsICcpIHtcbiAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gbm9kZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbGFzdEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGVzW2ldKTtcbiAgICAgICAgICAgIGlmIChpIDwgbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFdoZXJlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3doZXJlICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndoZXJlKTtcbiAgICB9XG4gICAgdmlzaXRIYXZpbmcobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnaGF2aW5nICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmhhdmluZyk7XG4gICAgfVxuICAgIHZpc2l0SW5zZXJ0UXVlcnkobm9kZSkge1xuICAgICAgICBjb25zdCByb290UXVlcnlOb2RlID0gdGhpcy5ub2RlU3RhY2suZmluZChRdWVyeU5vZGUuaXMpO1xuICAgICAgICBjb25zdCBpc1N1YlF1ZXJ5ID0gcm9vdFF1ZXJ5Tm9kZSAhPT0gbm9kZTtcbiAgICAgICAgaWYgKCFpc1N1YlF1ZXJ5ICYmIG5vZGUuZXhwbGFpbikge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHBsYWluKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3ViUXVlcnkgJiYgIU1lcmdlUXVlcnlOb2RlLmlzKHJvb3RRdWVyeU5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndpdGgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2l0aCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUucmVwbGFjZSA/ICdyZXBsYWNlJyA6ICdpbnNlcnQnKTtcbiAgICAgICAgLy8gVE9ETzogcmVtb3ZlIGluIDAuMjkuXG4gICAgICAgIGlmIChub2RlLmlnbm9yZSkge1xuICAgICAgICAgICAgbG9nT25jZSgnYEluc2VydFF1ZXJ5Tm9kZS5pZ25vcmVgIGlzIGRlcHJlY2F0ZWQuIFVzZSBgSW5zZXJ0UXVlcnlOb2RlLm9yQWN0aW9uYCBpbnN0ZWFkLicpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBpZ25vcmUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vckFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3JBY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnRvcCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudG9wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5pbnRvKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGludG8gJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmludG8pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vdXRwdXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS52YWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRlZmF1bHRWYWx1ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnZGVmYXVsdCB2YWx1ZXMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vbkNvbmZsaWN0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vbkNvbmZsaWN0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vbkR1cGxpY2F0ZUtleSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub25EdXBsaWNhdGVLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnJldHVybmluZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmV0dXJuaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdWJRdWVyeSAmJiAhTWVyZ2VRdWVyeU5vZGUuaXMocm9vdFF1ZXJ5Tm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0VmFsdWVzKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3ZhbHVlcyAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnZhbHVlcyk7XG4gICAgfVxuICAgIHZpc2l0RGVsZXRlUXVlcnkobm9kZSkge1xuICAgICAgICBjb25zdCBpc1N1YlF1ZXJ5ID0gdGhpcy5ub2RlU3RhY2suZmluZChRdWVyeU5vZGUuaXMpICE9PSBub2RlO1xuICAgICAgICBpZiAoIWlzU3ViUXVlcnkgJiYgbm9kZS5leHBsYWluKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cGxhaW4pO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdWJRdWVyeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aXRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndpdGgpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnZGVsZXRlICcpO1xuICAgICAgICBpZiAobm9kZS50b3ApIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudG9wKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5mcm9tKTtcbiAgICAgICAgaWYgKG5vZGUub3V0cHV0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vdXRwdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnVzaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS51c2luZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuam9pbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuam9pbnMsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2hlcmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndoZXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vcmRlckJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcmRlckJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5saW1pdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnJldHVybmluZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmV0dXJuaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdWJRdWVyeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5lbmRNb2RpZmllcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5lbmRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRSZXR1cm5pbmcobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgncmV0dXJuaW5nICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuc2VsZWN0aW9ucyk7XG4gICAgfVxuICAgIHZpc2l0QWxpYXMobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5vZGUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIGFzICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmFsaWFzKTtcbiAgICB9XG4gICAgdmlzaXRSZWZlcmVuY2Uobm9kZSkge1xuICAgICAgICBpZiAobm9kZS50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICB9XG4gICAgdmlzaXRTZWxlY3RBbGwoXykge1xuICAgICAgICB0aGlzLmFwcGVuZCgnKicpO1xuICAgIH1cbiAgICB2aXNpdElkZW50aWZpZXIobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLmdldExlZnRJZGVudGlmaWVyV3JhcHBlcigpKTtcbiAgICAgICAgdGhpcy5jb21waWxlVW53cmFwcGVkSWRlbnRpZmllcihub2RlKTtcbiAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRSaWdodElkZW50aWZpZXJXcmFwcGVyKCkpO1xuICAgIH1cbiAgICBjb21waWxlVW53cmFwcGVkSWRlbnRpZmllcihub2RlKSB7XG4gICAgICAgIGlmICghaXNTdHJpbmcobm9kZS5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhIG5vbi1zdHJpbmcgaWRlbnRpZmllciB3YXMgcGFzc2VkIHRvIGNvbXBpbGVVbndyYXBwZWRJZGVudGlmaWVyLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuc2FuaXRpemVJZGVudGlmaWVyKG5vZGUubmFtZSkpO1xuICAgIH1cbiAgICB2aXNpdEFuZChub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGVmdCk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgYW5kICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJpZ2h0KTtcbiAgICB9XG4gICAgdmlzaXRPcihub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGVmdCk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgb3IgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmlnaHQpO1xuICAgIH1cbiAgICB2aXNpdFZhbHVlKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZEltbWVkaWF0ZVZhbHVlKG5vZGUudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRWYWx1ZShub2RlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFZhbHVlTGlzdChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS52YWx1ZXMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdFR1cGxlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnZhbHVlcyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgfVxuICAgIHZpc2l0UHJpbWl0aXZlVmFsdWVMaXN0KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgY29uc3QgeyB2YWx1ZXMgfSA9IG5vZGU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZFZhbHVlKHZhbHVlc1tpXSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gdmFsdWVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnLCAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdFBhcmVucyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubm9kZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgfVxuICAgIHZpc2l0Sm9pbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKEpPSU5fVFlQRV9TUUxbbm9kZS5qb2luVHlwZV0pO1xuICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgaWYgKG5vZGUub24pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ29uICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9uKTtcbiAgICB9XG4gICAgdmlzaXRSYXcobm9kZSkge1xuICAgICAgICBjb25zdCB7IHNxbEZyYWdtZW50cywgcGFyYW1ldGVyczogcGFyYW1zIH0gPSBub2RlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNxbEZyYWdtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoc3FsRnJhZ21lbnRzW2ldKTtcbiAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKHBhcmFtc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRPcGVyYXRvcihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUub3BlcmF0b3IpO1xuICAgIH1cbiAgICB2aXNpdFRhYmxlKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgfVxuICAgIHZpc2l0U2NoZW1hYmxlSWRlbnRpZmllcihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnNjaGVtYSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5zY2hlbWEpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJy4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmlkZW50aWZpZXIpO1xuICAgIH1cbiAgICB2aXNpdENyZWF0ZVRhYmxlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2NyZWF0ZSAnKTtcbiAgICAgICAgaWYgKG5vZGUuZnJvbnRNb2RpZmllcnMgJiYgbm9kZS5mcm9udE1vZGlmaWVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZnJvbnRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnRlbXBvcmFyeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3RlbXBvcmFyeSAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgndGFibGUgJyk7XG4gICAgICAgIGlmIChub2RlLmlmTm90RXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgbm90IGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgaWYgKG5vZGUuc2VsZWN0UXVlcnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgYXMgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnNlbGVjdFF1ZXJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChbLi4ubm9kZS5jb2x1bW5zLCAuLi4obm9kZS5jb25zdHJhaW50cyA/PyBbXSldKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgICAgICBpZiAobm9kZS5vbkNvbW1pdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gY29tbWl0ICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5vZGUub25Db21taXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzICYmIG5vZGUuZW5kTW9kaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5lbmRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRDb2x1bW5EZWZpbml0aW9uKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuaWZOb3RFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBub3QgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5kYXRhVHlwZSk7XG4gICAgICAgIGlmIChub2RlLnVuc2lnbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHVuc2lnbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZnJvbnRNb2RpZmllcnMgJiYgbm9kZS5mcm9udE1vZGlmaWVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmZyb250TW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmdlbmVyYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZ2VuZXJhdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5pZGVudGl0eSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBpZGVudGl0eScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRlZmF1bHRUbykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGVmYXVsdFRvKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5ub3ROdWxsKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG5vdCBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudW5pcXVlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHVuaXF1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm51bGxzTm90RGlzdGluY3QpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgbnVsbHMgbm90IGRpc3RpbmN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucHJpbWFyeUtleSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBwcmltYXJ5IGtleScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmF1dG9JbmNyZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLmdldEF1dG9JbmNyZW1lbnQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucmVmZXJlbmNlcykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmVmZXJlbmNlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuY2hlY2spIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNoZWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5lbmRNb2RpZmllcnMgJiYgbm9kZS5lbmRNb2RpZmllcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5lbmRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0QXV0b0luY3JlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuICdhdXRvX2luY3JlbWVudCc7XG4gICAgfVxuICAgIHZpc2l0UmVmZXJlbmNlcyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdyZWZlcmVuY2VzICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgaWYgKG5vZGUub25EZWxldGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gZGVsZXRlICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5vbkRlbGV0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub25VcGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gdXBkYXRlICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5vblVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXREcm9wVGFibGUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCB0YWJsZSAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIGlmIChub2RlLmNhc2NhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgY2FzY2FkZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RGF0YVR5cGUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChub2RlLmRhdGFUeXBlKTtcbiAgICB9XG4gICAgdmlzaXRPcmRlckJ5KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ29yZGVyIGJ5ICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuaXRlbXMpO1xuICAgIH1cbiAgICB2aXNpdE9yZGVyQnlJdGVtKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcmRlckJ5KTtcbiAgICAgICAgaWYgKG5vZGUuY29sbGF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2xsYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGlyZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5udWxscykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBudWxscyAnKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5vZGUubnVsbHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0R3JvdXBCeShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdncm91cCBieSAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLml0ZW1zKTtcbiAgICB9XG4gICAgdmlzaXRHcm91cEJ5SXRlbShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZ3JvdXBCeSk7XG4gICAgfVxuICAgIHZpc2l0VXBkYXRlUXVlcnkobm9kZSkge1xuICAgICAgICBjb25zdCByb290UXVlcnlOb2RlID0gdGhpcy5ub2RlU3RhY2suZmluZChRdWVyeU5vZGUuaXMpO1xuICAgICAgICBjb25zdCBpc1N1YlF1ZXJ5ID0gcm9vdFF1ZXJ5Tm9kZSAhPT0gbm9kZTtcbiAgICAgICAgaWYgKCFpc1N1YlF1ZXJ5ICYmIG5vZGUuZXhwbGFpbikge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHBsYWluKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3ViUXVlcnkgJiYgIU1lcmdlUXVlcnlOb2RlLmlzKHJvb3RRdWVyeU5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndpdGgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2l0aCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCd1cGRhdGUgJyk7XG4gICAgICAgIGlmIChub2RlLnRvcCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50b3ApO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdzZXQgJyk7XG4gICAgICAgIGlmIChub2RlLnVwZGF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS51cGRhdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vdXRwdXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZnJvbSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuam9pbnMpIHtcbiAgICAgICAgICAgIGlmICghbm9kZS5mcm9tKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSm9pbnMgaW4gYW4gdXBkYXRlIHF1ZXJ5IGFyZSBvbmx5IHN1cHBvcnRlZCBhcyBhIHBhcnQgb2YgYSBQb3N0Z3JlU1FMICd1cGRhdGUgc2V0IGZyb20gam9pbicgcXVlcnkuIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIE15U1FMICd1cGRhdGUgam9pbiBzZXQnIHF1ZXJ5LCBzZWUgaHR0cHM6Ly9reXNlbHkuZGV2L2RvY3MvZXhhbXBsZXMvdXBkYXRlL215LXNxbC1qb2luc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuam9pbnMsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2hlcmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndoZXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vcmRlckJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcmRlckJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5saW1pdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnJldHVybmluZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmV0dXJuaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdWJRdWVyeSAmJiAhTWVyZ2VRdWVyeU5vZGUuaXMocm9vdFF1ZXJ5Tm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0Q29sdW1uVXBkYXRlKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2x1bW4pO1xuICAgICAgICB0aGlzLmFwcGVuZCgnID0gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudmFsdWUpO1xuICAgIH1cbiAgICB2aXNpdExpbWl0KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2xpbWl0ICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmxpbWl0KTtcbiAgICB9XG4gICAgdmlzaXRPZmZzZXQobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnb2Zmc2V0ICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9mZnNldCk7XG4gICAgfVxuICAgIHZpc2l0T25Db25mbGljdChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdvbiBjb25mbGljdCcpO1xuICAgICAgICBpZiAobm9kZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICgnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9kZS5jb25zdHJhaW50KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uIGNvbnN0cmFpbnQgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbnN0cmFpbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vZGUuaW5kZXhFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICgnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuaW5kZXhFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuaW5kZXhXaGVyZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuaW5kZXhXaGVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZG9Ob3RoaW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGRvIG5vdGhpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlLnVwZGF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgZG8gdXBkYXRlIHNldCAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS51cGRhdGVzKTtcbiAgICAgICAgICAgIGlmIChub2RlLnVwZGF0ZVdoZXJlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnVwZGF0ZVdoZXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE9uRHVwbGljYXRlS2V5KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ29uIGR1cGxpY2F0ZSBrZXkgdXBkYXRlICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUudXBkYXRlcyk7XG4gICAgfVxuICAgIHZpc2l0Q3JlYXRlSW5kZXgobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnY3JlYXRlICcpO1xuICAgICAgICBpZiAobm9kZS51bmlxdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCd1bmlxdWUgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ2luZGV4ICcpO1xuICAgICAgICBpZiAobm9kZS5pZk5vdEV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIG5vdCBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgaWYgKG5vZGUudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS51c2luZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB1c2luZyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudXNpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5udWxsc05vdERpc3RpbmN0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG51bGxzIG5vdCBkaXN0aW5jdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndoZXJlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aGVyZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXREcm9wSW5kZXgobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCBpbmRleCAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgaWYgKG5vZGUudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5jYXNjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGNhc2NhZGUnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdENyZWF0ZVNjaGVtYShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjcmVhdGUgc2NoZW1hICcpO1xuICAgICAgICBpZiAobm9kZS5pZk5vdEV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIG5vdCBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5zY2hlbWEpO1xuICAgIH1cbiAgICB2aXNpdERyb3BTY2hlbWEobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCBzY2hlbWEgJyk7XG4gICAgICAgIGlmIChub2RlLmlmRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuc2NoZW1hKTtcbiAgICAgICAgaWYgKG5vZGUuY2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBjYXNjYWRlJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRQcmltYXJ5S2V5Q29uc3RyYWludChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdjb25zdHJhaW50ICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ3ByaW1hcnkga2V5ICgnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB0aGlzLmJ1aWxkRGVmZXJyYWJsZShub2RlKTtcbiAgICB9XG4gICAgYnVpbGREZWZlcnJhYmxlKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuZGVmZXJyYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5kZWZlcnJhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBkZWZlcnJhYmxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG5vdCBkZWZlcnJhYmxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGx5RGVmZXJyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGx5RGVmZXJyZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGluaXRpYWxseSBkZWZlcnJlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBpbml0aWFsbHkgaW1tZWRpYXRlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRVbmlxdWVDb25zdHJhaW50KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUubmFtZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2NvbnN0cmFpbnQgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgndW5pcXVlJyk7XG4gICAgICAgIGlmIChub2RlLm51bGxzTm90RGlzdGluY3QpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgbnVsbHMgbm90IGRpc3RpbmN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJyAoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgdGhpcy5idWlsZERlZmVycmFibGUobm9kZSk7XG4gICAgfVxuICAgIHZpc2l0Q2hlY2tDb25zdHJhaW50KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUubmFtZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2NvbnN0cmFpbnQgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnY2hlY2sgKCcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdEZvcmVpZ25LZXlDb25zdHJhaW50KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUubmFtZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2NvbnN0cmFpbnQgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnZm9yZWlnbiBrZXkgKCcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJlZmVyZW5jZXMpO1xuICAgICAgICBpZiAobm9kZS5vbkRlbGV0ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBvbiBkZWxldGUgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZChub2RlLm9uRGVsZXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vblVwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBvbiB1cGRhdGUgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZChub2RlLm9uVXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1aWxkRGVmZXJyYWJsZShub2RlKTtcbiAgICB9XG4gICAgdmlzaXRMaXN0KG5vZGUpIHtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLml0ZW1zKTtcbiAgICB9XG4gICAgdmlzaXRXaXRoKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3dpdGggJyk7XG4gICAgICAgIGlmIChub2RlLnJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3JlY3Vyc2l2ZSAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZXhwcmVzc2lvbnMpO1xuICAgIH1cbiAgICB2aXNpdENvbW1vblRhYmxlRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgYXMgJyk7XG4gICAgICAgIGlmIChpc0Jvb2xlYW4obm9kZS5tYXRlcmlhbGl6ZWQpKSB7XG4gICAgICAgICAgICBpZiAoIW5vZGUubWF0ZXJpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ25vdCAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdtYXRlcmlhbGl6ZWQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTtcbiAgICB9XG4gICAgdmlzaXRDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIGlmIChub2RlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0QWx0ZXJUYWJsZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdhbHRlciB0YWJsZSAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIGlmIChub2RlLnJlbmFtZVRvKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgncmVuYW1lIHRvICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZW5hbWVUbyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuc2V0U2NoZW1hKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnc2V0IHNjaGVtYSAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuc2V0U2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5hZGRDb25zdHJhaW50KSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmFkZENvbnN0cmFpbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRyb3BDb25zdHJhaW50KSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRyb3BDb25zdHJhaW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5yZW5hbWVDb25zdHJhaW50KSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJlbmFtZUNvbnN0cmFpbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNvbHVtbkFsdGVyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVDb2x1bW5BbHRlcmF0aW9ucyhub2RlLmNvbHVtbkFsdGVyYXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5hZGRJbmRleCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5hZGRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZHJvcEluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRyb3BJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRBZGRDb2x1bW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnYWRkIGNvbHVtbiAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2x1bW4pO1xuICAgIH1cbiAgICB2aXNpdFJlbmFtZUNvbHVtbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdyZW5hbWUgY29sdW1uICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgdG8gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmVuYW1lVG8pO1xuICAgIH1cbiAgICB2aXNpdERyb3BDb2x1bW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCBjb2x1bW4gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICB9XG4gICAgdmlzaXRBbHRlckNvbHVtbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdhbHRlciBjb2x1bW4gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgaWYgKG5vZGUuZGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFubm91bmNlc05ld0NvbHVtbkRhdGFUeXBlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgndHlwZSAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGF0YVR5cGUpO1xuICAgICAgICAgICAgaWYgKG5vZGUuZGF0YVR5cGVFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3VzaW5nICcpO1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGF0YVR5cGVFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5zZXREZWZhdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnc2V0IGRlZmF1bHQgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnNldERlZmF1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRyb3BEZWZhdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCBkZWZhdWx0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuc2V0Tm90TnVsbCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3NldCBub3QgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRyb3BOb3ROdWxsKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCBub3QgbnVsbCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0TW9kaWZ5Q29sdW1uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ21vZGlmeSBjb2x1bW4gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICB9XG4gICAgdmlzaXRBZGRDb25zdHJhaW50KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2FkZCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb25zdHJhaW50KTtcbiAgICB9XG4gICAgdmlzaXREcm9wQ29uc3RyYWludChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkcm9wIGNvbnN0cmFpbnQgJyk7XG4gICAgICAgIGlmIChub2RlLmlmRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29uc3RyYWludE5hbWUpO1xuICAgICAgICBpZiAobm9kZS5tb2RpZmllciA9PT0gJ2Nhc2NhZGUnKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGNhc2NhZGUnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlLm1vZGlmaWVyID09PSAncmVzdHJpY3QnKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHJlc3RyaWN0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRSZW5hbWVDb25zdHJhaW50KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3JlbmFtZSBjb25zdHJhaW50ICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9sZE5hbWUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIHRvICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5ld05hbWUpO1xuICAgIH1cbiAgICB2aXNpdFNldE9wZXJhdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUub3BlcmF0b3IpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICBpZiAobm9kZS5hbGwpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdhbGwgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTtcbiAgICB9XG4gICAgdmlzaXRDcmVhdGVWaWV3KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2NyZWF0ZSAnKTtcbiAgICAgICAgaWYgKG5vZGUub3JSZXBsYWNlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnb3IgcmVwbGFjZSAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5tYXRlcmlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdtYXRlcmlhbGl6ZWQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudGVtcG9yYXJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgndGVtcG9yYXJ5ICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCd2aWV3ICcpO1xuICAgICAgICBpZiAobm9kZS5pZk5vdEV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIG5vdCBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgaWYgKG5vZGUuY29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmFzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnYXMgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmFzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3JlZnJlc2ggbWF0ZXJpYWxpemVkIHZpZXcgJyk7XG4gICAgICAgIGlmIChub2RlLmNvbmN1cnJlbnRseSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2NvbmN1cnJlbnRseSAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICBpZiAobm9kZS53aXRoTm9EYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHdpdGggbm8gZGF0YScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB3aXRoIGRhdGEnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdERyb3BWaWV3KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3AgJyk7XG4gICAgICAgIGlmIChub2RlLm1hdGVyaWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ21hdGVyaWFsaXplZCAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgndmlldyAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgaWYgKG5vZGUuY2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBjYXNjYWRlJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRHZW5lcmF0ZWQobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZ2VuZXJhdGVkICcpO1xuICAgICAgICBpZiAobm9kZS5hbHdheXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdhbHdheXMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYnlEZWZhdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnYnkgZGVmYXVsdCAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnYXMgJyk7XG4gICAgICAgIGlmIChub2RlLmlkZW50aXR5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWRlbnRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuc3RvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHN0b3JlZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RGVmYXVsdFZhbHVlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2RlZmF1bHQgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgdmlzaXRTZWxlY3RNb2RpZmllcihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnJhd01vZGlmaWVyKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJhd01vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKFNFTEVDVF9NT0RJRklFUl9TUUxbbm9kZS5tb2RpZmllcl0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9mKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9mICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLm9mLCAnLCAnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdENyZWF0ZVR5cGUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnY3JlYXRlIHR5cGUgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIGlmIChub2RlLmVudW0pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgYXMgZW51bSAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZW51bSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXREcm9wVHlwZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkcm9wIHR5cGUgJyk7XG4gICAgICAgIGlmIChub2RlLmlmRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgfVxuICAgIHZpc2l0RXhwbGFpbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdleHBsYWluJyk7XG4gICAgICAgIGlmIChub2RlLm9wdGlvbnMgfHwgbm9kZS5mb3JtYXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLmdldExlZnRFeHBsYWluT3B0aW9uc1dyYXBwZXIoKSk7XG4gICAgICAgICAgICBpZiAobm9kZS5vcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5mb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRFeHBsYWluT3B0aW9uc0RlbGltaXRlcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZS5mb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnZm9ybWF0Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRFeHBsYWluT3B0aW9uQXNzaWdubWVudCgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZChub2RlLmZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLmdldFJpZ2h0RXhwbGFpbk9wdGlvbnNXcmFwcGVyKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RGVmYXVsdEluc2VydFZhbHVlKF8pIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2RlZmF1bHQnKTtcbiAgICB9XG4gICAgdmlzaXRBZ2dyZWdhdGVGdW5jdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUuZnVuYyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIGlmIChub2RlLmRpc3RpbmN0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnZGlzdGluY3QgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmFnZ3JlZ2F0ZWQpO1xuICAgICAgICBpZiAobm9kZS5vcmRlckJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcmRlckJ5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICBpZiAobm9kZS53aXRoaW5Hcm91cCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB3aXRoaW4gZ3JvdXAgKCcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aXRoaW5Hcm91cCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBmaWx0ZXIoJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmZpbHRlcik7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm92ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm92ZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0T3Zlcihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdvdmVyKCcpO1xuICAgICAgICBpZiAobm9kZS5wYXJ0aXRpb25CeSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5wYXJ0aXRpb25CeSk7XG4gICAgICAgICAgICBpZiAobm9kZS5vcmRlckJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vcmRlckJ5KSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9yZGVyQnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgfVxuICAgIHZpc2l0UGFydGl0aW9uQnkobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgncGFydGl0aW9uIGJ5ICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuaXRlbXMpO1xuICAgIH1cbiAgICB2aXNpdFBhcnRpdGlvbkJ5SXRlbShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucGFydGl0aW9uQnkpO1xuICAgIH1cbiAgICB2aXNpdEJpbmFyeU9wZXJhdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGVmdE9wZXJhbmQpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9wZXJhdG9yKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yaWdodE9wZXJhbmQpO1xuICAgIH1cbiAgICB2aXNpdFVuYXJ5T3BlcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcGVyYXRvcik7XG4gICAgICAgIGlmICghdGhpcy5pc01pbnVzT3BlcmF0b3Iobm9kZS5vcGVyYXRvcikpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcGVyYW5kKTtcbiAgICB9XG4gICAgaXNNaW51c09wZXJhdG9yKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIE9wZXJhdG9yTm9kZS5pcyhub2RlKSAmJiBub2RlLm9wZXJhdG9yID09PSAnLSc7XG4gICAgfVxuICAgIHZpc2l0VXNpbmcobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgndXNpbmcgJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS50YWJsZXMpO1xuICAgIH1cbiAgICB2aXNpdEZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5mdW5jKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgfVxuICAgIHZpc2l0Q2FzZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjYXNlJyk7XG4gICAgICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2hlbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS53aGVuLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmVsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgZWxzZSAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJyBlbmQnKTtcbiAgICAgICAgaWYgKG5vZGUuaXNTdGF0ZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgY2FzZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0V2hlbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCd3aGVuICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbmRpdGlvbik7XG4gICAgICAgIGlmIChub2RlLnJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB0aGVuICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZXN1bHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0SlNPTlJlZmVyZW5jZShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmVmZXJlbmNlKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50cmF2ZXJzYWwpO1xuICAgIH1cbiAgICB2aXNpdEpTT05QYXRoKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuaW5PcGVyYXRvcikge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5pbk9wZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZChcIickXCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHBhdGhMZWcgb2Ygbm9kZS5wYXRoTGVncykge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUocGF0aExlZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoXCInXCIpO1xuICAgIH1cbiAgICB2aXNpdEpTT05QYXRoTGVnKG5vZGUpIHtcbiAgICAgICAgY29uc3QgaXNBcnJheUxvY2F0aW9uID0gbm9kZS50eXBlID09PSAnQXJyYXlMb2NhdGlvbic7XG4gICAgICAgIHRoaXMuYXBwZW5kKGlzQXJyYXlMb2NhdGlvbiA/ICdbJyA6ICcuJyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKFN0cmluZyhub2RlLnZhbHVlKSk7XG4gICAgICAgIGlmIChpc0FycmF5TG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCddJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRKU09OT3BlcmF0b3JDaGFpbihub2RlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBub2RlLnZhbHVlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPT09IGxlbiAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9wZXJhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCctPicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS52YWx1ZXNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0TWVyZ2VRdWVyeShub2RlKSB7XG4gICAgICAgIGlmIChub2RlLndpdGgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2l0aCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdtZXJnZSAnKTtcbiAgICAgICAgaWYgKG5vZGUudG9wKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRvcCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdpbnRvICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmludG8pO1xuICAgICAgICBpZiAobm9kZS51c2luZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudXNpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndoZW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLndoZW5zLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnJldHVybmluZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmV0dXJuaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vdXRwdXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0TWF0Y2hlZChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5vdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ25vdCAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnbWF0Y2hlZCcpO1xuICAgICAgICBpZiAobm9kZS5ieVNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBieSBzb3VyY2UnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdEFkZEluZGV4KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2FkZCAnKTtcbiAgICAgICAgaWYgKG5vZGUudW5pcXVlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgndW5pcXVlICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdpbmRleCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgaWYgKG5vZGUuY29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAoJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnVzaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHVzaW5nICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS51c2luZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRDYXN0KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Nhc3QoJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgYXMgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGF0YVR5cGUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdEZldGNoKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2ZldGNoIG5leHQgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucm93Q291bnQpO1xuICAgICAgICB0aGlzLmFwcGVuZChgIHJvd3MgJHtub2RlLm1vZGlmaWVyfWApO1xuICAgIH1cbiAgICB2aXNpdE91dHB1dChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdvdXRwdXQgJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5zZWxlY3Rpb25zKTtcbiAgICB9XG4gICAgdmlzaXRUb3Aobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChgdG9wKCR7bm9kZS5leHByZXNzaW9ufSlgKTtcbiAgICAgICAgaWYgKG5vZGUubW9kaWZpZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZChgICR7bm9kZS5tb2RpZmllcnN9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRPckFjdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUuYWN0aW9uKTtcbiAgICB9XG4gICAgdmlzaXRDb2xsYXRlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2NvbGxhdGUgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sbGF0aW9uKTtcbiAgICB9XG4gICAgYXBwZW5kKHN0cikge1xuICAgICAgICB0aGlzLiNzcWwgKz0gc3RyO1xuICAgIH1cbiAgICBhcHBlbmRWYWx1ZShwYXJhbWV0ZXIpIHtcbiAgICAgICAgdGhpcy5hZGRQYXJhbWV0ZXIocGFyYW1ldGVyKTtcbiAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRDdXJyZW50UGFyYW1ldGVyUGxhY2Vob2xkZXIoKSk7XG4gICAgfVxuICAgIGdldExlZnRJZGVudGlmaWVyV3JhcHBlcigpIHtcbiAgICAgICAgcmV0dXJuICdcIic7XG4gICAgfVxuICAgIGdldFJpZ2h0SWRlbnRpZmllcldyYXBwZXIoKSB7XG4gICAgICAgIHJldHVybiAnXCInO1xuICAgIH1cbiAgICBnZXRDdXJyZW50UGFyYW1ldGVyUGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHJldHVybiAnJCcgKyB0aGlzLm51bVBhcmFtZXRlcnM7XG4gICAgfVxuICAgIGdldExlZnRFeHBsYWluT3B0aW9uc1dyYXBwZXIoKSB7XG4gICAgICAgIHJldHVybiAnKCc7XG4gICAgfVxuICAgIGdldEV4cGxhaW5PcHRpb25Bc3NpZ25tZW50KCkge1xuICAgICAgICByZXR1cm4gJyAnO1xuICAgIH1cbiAgICBnZXRFeHBsYWluT3B0aW9uc0RlbGltaXRlcigpIHtcbiAgICAgICAgcmV0dXJuICcsICc7XG4gICAgfVxuICAgIGdldFJpZ2h0RXhwbGFpbk9wdGlvbnNXcmFwcGVyKCkge1xuICAgICAgICByZXR1cm4gJyknO1xuICAgIH1cbiAgICBzYW5pdGl6ZUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICAgICAgICBjb25zdCBsZWZ0V3JhcCA9IHRoaXMuZ2V0TGVmdElkZW50aWZpZXJXcmFwcGVyKCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0V3JhcCA9IHRoaXMuZ2V0UmlnaHRJZGVudGlmaWVyV3JhcHBlcigpO1xuICAgICAgICBsZXQgc2FuaXRpemVkID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBpZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBzYW5pdGl6ZWQgKz0gYztcbiAgICAgICAgICAgIGlmIChjID09PSBsZWZ0V3JhcCkge1xuICAgICAgICAgICAgICAgIHNhbml0aXplZCArPSBsZWZ0V3JhcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09IHJpZ2h0V3JhcCkge1xuICAgICAgICAgICAgICAgIHNhbml0aXplZCArPSByaWdodFdyYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNhbml0aXplZDtcbiAgICB9XG4gICAgc2FuaXRpemVTdHJpbmdMaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKExJVF9XUkFQX1JFR0VYLCBcIicnXCIpO1xuICAgIH1cbiAgICBhZGRQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgICAgIHRoaXMuI3BhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXIpO1xuICAgIH1cbiAgICBhcHBlbmRJbW1lZGlhdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZFN0cmluZ0xpdGVyYWwodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSB8fCBpc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc051bGwodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kSW1tZWRpYXRlVmFsdWUodmFsdWUudG9JU09TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNCaWdJbnQodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZEltbWVkaWF0ZVZhbHVlKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGltbWVkaWF0ZSB2YWx1ZSAke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFwcGVuZFN0cmluZ0xpdGVyYWwodmFsdWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoXCInXCIpO1xuICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLnNhbml0aXplU3RyaW5nTGl0ZXJhbCh2YWx1ZSkpO1xuICAgICAgICB0aGlzLmFwcGVuZChcIidcIik7XG4gICAgfVxuICAgIHNvcnRTZWxlY3RNb2RpZmllcnMoYXJyKSB7XG4gICAgICAgIGFyci5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5tb2RpZmllciAmJiByaWdodC5tb2RpZmllclxuICAgICAgICAgICAgPyBTRUxFQ1RfTU9ESUZJRVJfUFJJT1JJVFlbbGVmdC5tb2RpZmllcl0gLVxuICAgICAgICAgICAgICAgIFNFTEVDVF9NT0RJRklFUl9QUklPUklUWVtyaWdodC5tb2RpZmllcl1cbiAgICAgICAgICAgIDogMSk7XG4gICAgICAgIHJldHVybiBmcmVlemUoYXJyKTtcbiAgICB9XG4gICAgY29tcGlsZUNvbHVtbkFsdGVyYXRpb25zKGNvbHVtbkFsdGVyYXRpb25zKSB7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3QoY29sdW1uQWx0ZXJhdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjb250cm9scyB3aGV0aGVyIHRoZSBkaWFsZWN0IGFkZHMgYSBcInR5cGVcIiBrZXl3b3JkIGJlZm9yZSBhIGNvbHVtbidzIG5ldyBkYXRhXG4gICAgICogdHlwZSBpbiBhbiBBTFRFUiBUQUJMRSBzdGF0ZW1lbnQuXG4gICAgICovXG4gICAgYW5ub3VuY2VzTmV3Q29sdW1uRGF0YVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbmNvbnN0IFNFTEVDVF9NT0RJRklFUl9TUUwgPSBmcmVlemUoe1xuICAgIEZvcktleVNoYXJlOiAnZm9yIGtleSBzaGFyZScsXG4gICAgRm9yTm9LZXlVcGRhdGU6ICdmb3Igbm8ga2V5IHVwZGF0ZScsXG4gICAgRm9yVXBkYXRlOiAnZm9yIHVwZGF0ZScsXG4gICAgRm9yU2hhcmU6ICdmb3Igc2hhcmUnLFxuICAgIE5vV2FpdDogJ25vd2FpdCcsXG4gICAgU2tpcExvY2tlZDogJ3NraXAgbG9ja2VkJyxcbiAgICBEaXN0aW5jdDogJ2Rpc3RpbmN0Jyxcbn0pO1xuY29uc3QgU0VMRUNUX01PRElGSUVSX1BSSU9SSVRZID0gZnJlZXplKHtcbiAgICBGb3JLZXlTaGFyZTogMSxcbiAgICBGb3JOb0tleVVwZGF0ZTogMSxcbiAgICBGb3JVcGRhdGU6IDEsXG4gICAgRm9yU2hhcmU6IDEsXG4gICAgTm9XYWl0OiAyLFxuICAgIFNraXBMb2NrZWQ6IDIsXG4gICAgRGlzdGluY3Q6IDAsXG59KTtcbmNvbnN0IEpPSU5fVFlQRV9TUUwgPSBmcmVlemUoe1xuICAgIElubmVySm9pbjogJ2lubmVyIGpvaW4nLFxuICAgIExlZnRKb2luOiAnbGVmdCBqb2luJyxcbiAgICBSaWdodEpvaW46ICdyaWdodCBqb2luJyxcbiAgICBGdWxsSm9pbjogJ2Z1bGwgam9pbicsXG4gICAgQ3Jvc3NKb2luOiAnY3Jvc3Mgam9pbicsXG4gICAgTGF0ZXJhbElubmVySm9pbjogJ2lubmVyIGpvaW4gbGF0ZXJhbCcsXG4gICAgTGF0ZXJhbExlZnRKb2luOiAnbGVmdCBqb2luIGxhdGVyYWwnLFxuICAgIExhdGVyYWxDcm9zc0pvaW46ICdjcm9zcyBqb2luIGxhdGVyYWwnLFxuICAgIE91dGVyQXBwbHk6ICdvdXRlciBhcHBseScsXG4gICAgQ3Jvc3NBcHBseTogJ2Nyb3NzIGFwcGx5JyxcbiAgICBVc2luZzogJ3VzaW5nJyxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kaWFsZWN0LWFkYXB0ZXItYmFzZS5kLnRzXCIgLz5cbi8qKlxuICogQSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBgRGlhbGVjdEFkYXB0ZXJgIHdpdGggc2Vuc2libGUgZGVmYXVsdCB2YWx1ZXMuXG4gKiBUaGlyZC1wYXJ0eSBkaWFsZWN0cyBjYW4gZXh0ZW5kIHRoaXMgaW5zdGVhZCBvZiBpbXBsZW1lbnRpbmcgdGhlIGBEaWFsZWN0QWRhcHRlcmBcbiAqIGludGVyZmFjZSBmcm9tIHNjcmF0Y2guIFRoYXQgd2F5IGFsbCBuZXcgc2V0dGluZ3Mgd2lsbCBnZXQgZGVmYXVsdCB2YWx1ZXMgd2hlblxuICogdGhleSBhcmUgYWRkZWQgYW5kIHRoZXJlIHdpbGwgYmUgbGVzcyBicmVha2luZyBjaGFuZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgRGlhbGVjdEFkYXB0ZXJCYXNlIHtcbiAgICBnZXQgc3VwcG9ydHNDcmVhdGVJZk5vdEV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBzdXBwb3J0c1RyYW5zYWN0aW9uYWxEZGwoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IHN1cHBvcnRzUmV0dXJuaW5nKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldCBzdXBwb3J0c091dHB1dCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcG9zdGdyZXMtcXVlcnktY29tcGlsZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBEZWZhdWx0UXVlcnlDb21waWxlciB9IGZyb20gJy4uLy4uL3F1ZXJ5LWNvbXBpbGVyL2RlZmF1bHQtcXVlcnktY29tcGlsZXIuanMnO1xuY29uc3QgSURfV1JBUF9SRUdFWCA9IC9cIi9nO1xuZXhwb3J0IGNsYXNzIFBvc3RncmVzUXVlcnlDb21waWxlciBleHRlbmRzIERlZmF1bHRRdWVyeUNvbXBpbGVyIHtcbiAgICBzYW5pdGl6ZUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gaWRlbnRpZmllci5yZXBsYWNlKElEX1dSQVBfUkVHRVgsICdcIlwiJyk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9wb3N0Z3Jlcy1hZGFwdGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgc3FsIH0gZnJvbSAnLi4vLi4vcmF3LWJ1aWxkZXIvc3FsLmpzJztcbmltcG9ydCB7IERpYWxlY3RBZGFwdGVyQmFzZSB9IGZyb20gJy4uL2RpYWxlY3QtYWRhcHRlci1iYXNlLmpzJztcbi8vIFJhbmRvbSBpZCBmb3Igb3VyIHRyYW5zYWN0aW9uIGxvY2suXG5jb25zdCBMT0NLX0lEID0gQmlnSW50KCczODUzMzE0NzkxMDYyMzA5MTA3Jyk7XG5leHBvcnQgY2xhc3MgUG9zdGdyZXNBZGFwdGVyIGV4dGVuZHMgRGlhbGVjdEFkYXB0ZXJCYXNlIHtcbiAgICBnZXQgc3VwcG9ydHNUcmFuc2FjdGlvbmFsRGRsKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IHN1cHBvcnRzUmV0dXJuaW5nKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYXN5bmMgYWNxdWlyZU1pZ3JhdGlvbkxvY2soZGIsIF9vcHQpIHtcbiAgICAgICAgLy8gQWNxdWlyZSBhIHRyYW5zYWN0aW9uIGxldmVsIGFkdmlzb3J5IGxvY2suXG4gICAgICAgIGF3YWl0IHNxbCBgc2VsZWN0IHBnX2Fkdmlzb3J5X3hhY3RfbG9jaygke3NxbC5saXQoTE9DS19JRCl9KWAuZXhlY3V0ZShkYik7XG4gICAgfVxuICAgIGFzeW5jIHJlbGVhc2VNaWdyYXRpb25Mb2NrKF9kYiwgX29wdCkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIGBwZ19hZHZpc29yeV94YWN0X2xvY2tgIGlzIGF1dG9tYXRpY2FsbHkgcmVsZWFzZWQgYXQgdGhlXG4gICAgICAgIC8vIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24gYW5kIHNpbmNlIGBzdXBwb3J0c1RyYW5zYWN0aW9uYWxEZGxgIHRydWUsIHdlIGtub3dcbiAgICAgICAgLy8gdGhlIGBkYmAgaW5zdGFuY2UgcGFzc2VkIHRvIGFjcXVpcmVNaWdyYXRpb25Mb2NrIGlzIGFjdHVhbGx5IGEgdHJhbnNhY3Rpb24uXG4gICAgfVxufVxuIiwgImltcG9ydCB7IHR5cGUgS3lzZWx5LCBQb3N0Z3Jlc0FkYXB0ZXIsIFBvc3RncmVzUXVlcnlDb21waWxlciB9IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBnZXRCdWlsZGVyIH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9zdGdyZVNRTEJ1aWxkZXI8RGF0YWJhc2UgPSBhbnk+KFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKTogS3lzZWx5PERhdGFiYXNlPiB7XG4gIHJldHVybiBnZXRCdWlsZGVyKHsgLi4ucmVxdWlyZW1lbnRzLCBBZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXIsIFF1ZXJ5Q29tcGlsZXI6IFBvc3RncmVzUXVlcnlDb21waWxlciB9KTtcbn1cbiIsICJpbXBvcnQgeyBFeHByZXNzaW9uLCBFeHByZXNzaW9uQnVpbGRlciwgc3FsLCBTcWxCb29sIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFkYXB0ZXJEZWxldGVEZXRhaWxzLFxuICBBZGFwdGVySW5zZXJ0RGV0YWlscyxcbiAgQWRhcHRlclF1ZXJ5RGV0YWlscyxcbiAgQWRhcHRlclVwZGF0ZURldGFpbHMsXG4gIENvbHVtbkZpbHRlcixcbiAgRmlsdGVyR3JvdXAsXG59IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgeyBhcHBseUluZmVycmVkUm93RmlsdGVycywgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBjb21waWxlIH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEJpZ0ludFN0cmluZyB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBnZXRQb3N0Z3JlU1FMQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcbmltcG9ydCB0eXBlIHsgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG4vKipcbiAqIGBjdGlkYCBpcyBhIHN5c3RlbSBjb2x1bW4gdGhhdCByZXByZXNlbnRzIHRoZSBwaHlzaWNhbCBsb2NhdGlvbiBvZiBhIHJvdyBpbiBhIHRhYmxlLlxuICogSXQgaXMgYSB0dXBsZSBvZiB0d28gaW50ZWdlcnM6IGAoYmxvY2tOdW1iZXIsIHR1cGxlSW5kZXgpYC5cbiAqIEl0IGlzIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSByb3cgaW4gYSB0YWJsZSwgZXZlbiBpZiB0aGUgcm93IGhhcyBubyBwcmltYXJ5IGtleSwgb3Igb3RoZXIgdW5pcXVlIGNvbnN0cmFpbnRzLlxuICpcbiAqIEV4YW1wbGU6ICcoMCwyMyknIHJlcHJlc2VudHMgdGhlIDI0dGggcm93IGluIHRoZSBmaXJzdCBibG9jayBvZiB0aGUgdGFibGUuXG4gKi9cbmV4cG9ydCB0eXBlIENUSURhc1RleHQgPSBgKCR7bnVtYmVyfSwke251bWJlcn0pYDtcblxuLyoqXG4gKiBJbnNlcnRzIG9uZSBvciBtb3JlIHJvd3MgaW50byBhIHRhYmxlIGFuZCByZXR1cm5zIHRoZSBpbnNlcnRlZCByb3dzIGFsb25nIHdpdGggdGhlaXIgYGN0aWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJJbnNlcnREZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHsgdGFibGUsIHJvd3MgfSA9IGRldGFpbHM7XG4gIGNvbnN0IHsgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEsIGNvbHVtbnMgfSA9IHRhYmxlO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCB7IGN0aWQ6IHVua25vd24gfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcbiAgY29uc3QgY29scyA9IE9iamVjdC5rZXlzKGNvbHVtbnMpO1xuICBjb25zdCBlbXB0eVJvd1dvcmthcm91bmQgPSB7IFtjb2xzWzBdIV06IHNxbGBkZWZhdWx0YCB9O1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC5pbnNlcnRJbnRvKHRhYmxlTmFtZSlcbiAgICAgIC52YWx1ZXMocm93cy5tYXAoKHJvdykgPT4gKE9iamVjdC5rZXlzKHJvdykubGVuZ3RoID09PSAwID8gZW1wdHlSb3dXb3JrYXJvdW5kIDogcm93KSkpXG4gICAgICAucmV0dXJuaW5nKGNvbHMpXG4gICAgICAucmV0dXJuaW5nKChlYikgPT4gZWIuY2FzdDxDVElEYXNUZXh0PihcImN0aWRcIiwgXCJ0ZXh0XCIpLmFzKFwiY3RpZFwiKSksXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgc2VsZWN0cyBhbGwgY29sdW1ucyBmcm9tIGEgdGFibGUsIGFsb25nIHdpdGggdGhlIGBjdGlkYCBjb2x1bW4sIGFuZCB1bmJvdW5kIHJvdyBjb3VudCBhcyBgb2lkYCAocmVzZXJ2ZWQgY29sdW1uIG5hbWUgdGhhdCBjYW5ub3QgY29uZmxpY3Qgd2l0aCB1c2VyIGNvbHVtbnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJRdWVyeURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHBhZ2VJbmRleCxcbiAgICBwYWdlU2l6ZSxcbiAgICBzb3J0T3JkZXIsXG4gICAgdGFibGU6IHsgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEsIGNvbHVtbnMgfSxcbiAgICBmaWx0ZXIgPSB7IGtpbmQ6IFwiRmlsdGVyR3JvdXBcIiwgYWZ0ZXI6IFwiYW5kXCIsIGZpbHRlcnM6IFtdIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCB7IGN0aWQ6IHVua25vd24gfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcbiAgY29uc3QgY29scyA9IE9iamVjdC5rZXlzKGNvbHVtbnMpO1xuXG4gIGNvbnN0IGNvdW50UXVlcnkgPSBidWlsZGVyXG4gICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgIC5zZWxlY3RGcm9tKHRhYmxlTmFtZSlcbiAgICAuc2VsZWN0KChlYikgPT4gZWIuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmZuLmNvYWxlc2NlKGViLmZuLmNvdW50QWxsKCksIHNxbC5saXQoMCkpLCBcInRleHRcIikuYXMoXCJvaWRcIikpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoKFwiY291bnRcIiwgKCkgPT4gY291bnRRdWVyeSlcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC5zZWxlY3RGcm9tKFt0YWJsZU5hbWUsIFwiY291bnRcIl0pXG4gICAgICAvLyBgb2lkYCBpcyBhIHJlc2VydmVkIGNvbHVtbiBuYW1lIGluIFBvc3RncmVTUUwsIHNvIHdlIHVzZSBpdCBhcyBhbiBhbGlhcyBmb3IgdGhlIHJvdyBjb3VudCB0byBub3QgY29uZmxpY3Qgd2l0aCB1c2VyIGNvbHVtbnMuXG4gICAgICAuc2VsZWN0KHNxbC5yZWYoXCJjb3VudC5vaWRcIikuJGNhc3RUbzxCaWdJbnRTdHJpbmc+KCkuYXMoXCJvaWRcIikpXG4gICAgICAuc2VsZWN0KChlYikgPT4gZWIuY2FzdDxDVElEYXNUZXh0PihcImN0aWRcIiwgXCJ0ZXh0XCIpLmFzKFwiY3RpZFwiKSlcbiAgICAgIC5zZWxlY3QoY29scylcbiAgICAgIC4kY2FsbCgocWIpID0+IHNvcnRPcmRlci5yZWR1Y2UoKHFiLCBpdGVtKSA9PiBxYi5vcmRlckJ5KGl0ZW0uY29sdW1uLCBpdGVtLmRpcmVjdGlvbiksIHFiKSlcbiAgICAgIC8vIFRPRE86IGN1cnNvciBwYWdpbmF0aW9uP1xuICAgICAgLndoZXJlKGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oZmlsdGVyLmZpbHRlcnMpKVxuICAgICAgLmxpbWl0KHBhZ2VTaXplKVxuICAgICAgLy8gd2UncmUgaW5qZWN0aW5nIHRoZSBvZmZzZXQgdmFsdWUgaGVyZSB0byBhdm9pZCBzZXJpYWxpemF0aW9uIGNvbXBsZXhpdHkgKGBiaWdpbnRgIGlzIGEgbm8tZ28gZm9yIGBKU09OLnN0cmluZ2lmeWApLlxuICAgICAgLm9mZnNldChzcWwubGl0KEJpZ0ludChwYWdlSW5kZXgpICogQmlnSW50KHBhZ2VTaXplKSkpLFxuICApO1xufVxuXG4vLyBIZWxwZXIgdG8gYnVpbGQgYW4gZXhwcmVzc2lvbiBidWlsZGVyIGZvciBhIHNpbmdsZSBmaWx0ZXIgb3IgYSBncm91cFxuZnVuY3Rpb24gYnVpbGRCYXNlRXhwcmVzc2lvbkJ1aWxkZXIoXG4gIHNwZWM6IENvbHVtbkZpbHRlciB8IEZpbHRlckdyb3VwLFxuKTogKGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IEV4cHJlc3Npb248U3FsQm9vbD4ge1xuICBpZiAoc3BlYy5raW5kID09PSBcIkNvbHVtbkZpbHRlclwiKSB7XG4gICAgcmV0dXJuIChlYjogRXhwcmVzc2lvbkJ1aWxkZXI8YW55LCBhbnk+KSA9PiBlYihlYi5yZWYoc3BlYy5jb2x1bW4pLCBzcGVjLm9wZXJhdG9yLCBzcGVjLnZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbihzcGVjLmZpbHRlcnMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oXG4gIGZpbHRlcnM6IChDb2x1bW5GaWx0ZXIgfCBGaWx0ZXJHcm91cClbXSxcbik6IChlYjogRXhwcmVzc2lvbkJ1aWxkZXI8YW55LCBhbnk+KSA9PiBFeHByZXNzaW9uPFNxbEJvb2w+IHtcbiAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gKGViKSA9PiBlYi5saXQodHJ1ZSk7IC8vIG5vIGZpbHRlcnMsIGFsd2F5cyB0cnVlXG5cbiAgY29uc3Qgb3JHcm91cHNPZkFuZEJ1aWxkZXJzOiAoKGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IEV4cHJlc3Npb248U3FsQm9vbD4pW11bXSA9IFtdO1xuICBsZXQgY3VycmVudEFuZEdyb3VwQnVpbGRlcnM6ICgoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gRXhwcmVzc2lvbjxTcWxCb29sPilbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKykge1xuICAgIGN1cnJlbnRBbmRHcm91cEJ1aWxkZXJzLnB1c2goYnVpbGRCYXNlRXhwcmVzc2lvbkJ1aWxkZXIoZmlsdGVyc1tpXSEpKTtcblxuICAgIC8vICZuIEFORCBncm91cCBlbmRzIGlmIGl0J3MgdGhlIGxhc3QgZmlsdGVyLCBvciB0aGUgaXRlbSBpcyBmb2xsb3dlZCBieSBhbiAnb3InXG4gICAgaWYgKGkgPT09IGZpbHRlcnMubGVuZ3RoIC0gMSB8fCBmaWx0ZXJzW2ldIS5hZnRlciA9PT0gXCJvclwiKSB7XG4gICAgICBvckdyb3Vwc09mQW5kQnVpbGRlcnMucHVzaChjdXJyZW50QW5kR3JvdXBCdWlsZGVycyk7XG4gICAgICBjdXJyZW50QW5kR3JvdXBCdWlsZGVycyA9IFtdOyAvLyBzdGFydCBhIG5ldyBncm91cFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4ge1xuICAgIGNvbnN0IGFuZEV4cHJlc3Npb25zID0gb3JHcm91cHNPZkFuZEJ1aWxkZXJzLm1hcCgoZ3JvdXApID0+IHtcbiAgICAgIHJldHVybiBlYi5hbmQoZ3JvdXAubWFwKChidWlsZGVyKSA9PiBidWlsZGVyKGViKSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGViLm9yKGFuZEV4cHJlc3Npb25zKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tTZWxlY3RRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjE6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGN0aWQ6IFwiKDAsMSlcIixcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMSxcbiAgICAgIG5hbWU6IFwiSm9obiBEb2VcIixcbiAgICAgIG9pZDogXCIyXCIsXG4gICAgICByb2xlOiBcImFkbWluXCIsXG4gICAgICBuYW1lX3JvbGU6IFwiSm9ubiBEb2UgLSBhZG1pblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoXCIyMDI1LTAxLTI2VDIwOjU2OjEyLjM0NVpcIiksXG4gICAgICBjdGlkOiBcIigwLDIpXCIsXG4gICAgICBkZWxldGVkX2F0OiBudWxsLFxuICAgICAgaWQ6IDIsXG4gICAgICBuYW1lOiBcIkphbmUgRG9lXCIsXG4gICAgICBvaWQ6IFwiMlwiLFxuICAgICAgcm9sZTogXCJwb3dlcnVzZXJcIixcbiAgICAgIG5hbWVfcm9sZTogXCJKYW5lIERvZSAtIHBvd2VydXNlclwiLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCBubyBuZWVkIHRvIGdvIG92ZXJib2FyZFxuICAgIFtLIGluIFJldHVyblR5cGU8dHlwZW9mIG1vY2tUYWJsZXNRdWVyeT5bMV1bXCJjb2x1bW5zXCJdW251bWJlcl1bXCJuYW1lXCJdIHwgXCJjdGlkXCIgfCBcIm9pZFwiXTogdW5rbm93bjtcbiAgfVtdO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHVwZGF0ZXMgYSBnaXZlbiByb3cgaW4gYSB0YWJsZSB3aXRoIGdpdmVuIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcGRhdGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclVwZGF0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGNoYW5nZXMsXG4gICAgcm93LFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCB7IGN0aWQ6IHVua25vd24gfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcbiAgY29uc3QgY29scyA9IE9iamVjdC5rZXlzKGNvbHVtbnMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC51cGRhdGVUYWJsZSh0YWJsZU5hbWUpXG4gICAgICAuc2V0KGNoYW5nZXMpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMoW3Jvd10sIGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhjb2xzKVxuICAgICAgLnJldHVybmluZygoZWIpID0+IFtcbiAgICAgICAgZWIuY2FzdDxDVElEYXNUZXh0PihcImN0aWRcIiwgXCJ0ZXh0XCIpLmFzKFwiY3RpZFwiKSxcbiAgICAgICAgZWJcbiAgICAgICAgICAuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmZuKFwiZmxvb3JcIiwgW2ViKGViLmZuKFwiZXh0cmFjdFwiLCBbc3FsYGVwb2NoIGZyb20gbm93KClgXSksIFwiKlwiLCAxXzAwMF8wMDApXSksIFwidGV4dFwiKVxuICAgICAgICAgIC5hcyhcIl9fcHNfdXBkYXRlZF9hdF9fXCIpLFxuICAgICAgXSksXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgZGVsZXRlcyBhIGdpdmVuIHNldCBvZiByb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlUXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJEZWxldGVEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICByb3dzLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCB7IGN0aWQ6IHVua25vd24gfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShidWlsZGVyLndpdGhTY2hlbWEoc2NoZW1hKS5kZWxldGVGcm9tKHRhYmxlTmFtZSkuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMocm93cywgY29sdW1ucykpKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcG9zdGdyZXMuZC50c1wiIC8+XG5pbXBvcnQgeyBzcWwgfSBmcm9tICcuLi9yYXctYnVpbGRlci9zcWwuanMnO1xuLyoqXG4gKiBBIHBvc3RncmVzIGhlbHBlciBmb3IgYWdncmVnYXRpbmcgYSBzdWJxdWVyeSAob3Igb3RoZXIgZXhwcmVzc2lvbikgaW50byBhIEpTT05CIGFycmF5LlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJzZWxlY3RcIiwgXCJOZXN0ZWQgYXJyYXlcIiwgMTEwKSAtLT5cbiAqXG4gKiBXaGlsZSBreXNlbHkgaXMgbm90IGFuIE9STSBhbmQgaXQgZG9lc24ndCBoYXZlIHRoZSBjb25jZXB0IG9mIHJlbGF0aW9ucywgd2UgZG8gcHJvdmlkZVxuICogaGVscGVycyBmb3IgZmV0Y2hpbmcgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cyBpbiBhIHNpbmdsZSBxdWVyeS4gSW4gdGhpcyBleGFtcGxlIHdlXG4gKiB1c2UgdGhlIGBqc29uQXJyYXlGcm9tYCBoZWxwZXIgdG8gZmV0Y2ggcGVyc29uJ3MgcGV0cyBhbG9uZyB3aXRoIHRoZSBwZXJzb24ncyBpZC5cbiAqXG4gKiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGhlbHBlcnMgdW5kZXIgdGhlIGBreXNlbHkvaGVscGVyc2AgZm9sZGVyLCBpbmNsdWRpbmdcbiAqIGBqc29uQXJyYXlGcm9tYCwgYXJlIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsgd2l0aCB0aGlyZCBwYXJ0eSBkaWFsZWN0cy4gSW4gb3JkZXIgZm9yXG4gKiB0aGVtIHRvIHdvcmssIHRoZSBkaWFsZWN0IG11c3QgYXV0b21hdGljYWxseSBwYXJzZSB0aGUgYGpzb25gIGRhdGEgdHlwZSBpbnRvXG4gKiBKYXZhU2NyaXB0IEpTT04gdmFsdWVzIGxpa2Ugb2JqZWN0cyBhbmQgYXJyYXlzLiBTb21lIGRpYWxlY3RzIG1pZ2h0IHNpbXBseSByZXR1cm5cbiAqIHRoZSBkYXRhIGFzIGEgSlNPTiBzdHJpbmcuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpbiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmBcbiAqIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvcG9zdGdyZXMnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQXJyYXlGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAub3JkZXJCeSgncGV0Lm5hbWUnKVxuICogICAgICkuYXMoJ3BldHMnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCAoXG4gKiAgIHNlbGVjdCBjb2FsZXNjZShqc29uX2FnZyhhZ2cpLCAnW10nKSBmcm9tIChcbiAqICAgICBzZWxlY3QgXCJwZXRcIi5cImlkXCIgYXMgXCJwZXRfaWRcIiwgXCJwZXRcIi5cIm5hbWVcIlxuICogICAgIGZyb20gXCJwZXRcIlxuICogICAgIHdoZXJlIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCJcbiAqICAgICBvcmRlciBieSBcInBldFwiLlwibmFtZVwiXG4gKiAgICkgYXMgYWdnXG4gKiApIGFzIFwicGV0c1wiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkFycmF5RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCBjb2FsZXNjZShqc29uX2FnZyhhZ2cpLCAnW10nKSBmcm9tICR7ZXhwcn0gYXMgYWdnKWA7XG59XG4vKipcbiAqIEEgcG9zdGdyZXMgaGVscGVyIGZvciB0dXJuaW5nIGEgc3VicXVlcnkgKG9yIG90aGVyIGV4cHJlc3Npb24pIGludG8gYSBKU09OIG9iamVjdC5cbiAqXG4gKiBUaGUgc3VicXVlcnkgbXVzdCBvbmx5IHJldHVybiBvbmUgcm93LlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJzZWxlY3RcIiwgXCJOZXN0ZWQgb2JqZWN0XCIsIDEyMCkgLS0+XG4gKlxuICogV2hpbGUga3lzZWx5IGlzIG5vdCBhbiBPUk0gYW5kIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgY29uY2VwdCBvZiByZWxhdGlvbnMsIHdlIGRvIHByb3ZpZGVcbiAqIGhlbHBlcnMgZm9yIGZldGNoaW5nIG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMgaW4gYSBzaW5nbGUgcXVlcnkuIEluIHRoaXMgZXhhbXBsZSB3ZVxuICogdXNlIHRoZSBganNvbk9iamVjdEZyb21gIGhlbHBlciB0byBmZXRjaCBwZXJzb24ncyBmYXZvcml0ZSBwZXQgYWxvbmcgd2l0aCB0aGUgcGVyc29uJ3MgaWQuXG4gKlxuICogUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBoZWxwZXJzIHVuZGVyIHRoZSBga3lzZWx5L2hlbHBlcnNgIGZvbGRlciwgaW5jbHVkaW5nXG4gKiBganNvbk9iamVjdEZyb21gLCBhcmUgbm90IGd1YXJhbnRlZWQgdG8gd29yayB3aXRoIHRoaXJkLXBhcnR5IGRpYWxlY3RzLiBJbiBvcmRlciBmb3JcbiAqIHRoZW0gdG8gd29yaywgdGhlIGRpYWxlY3QgbXVzdCBhdXRvbWF0aWNhbGx5IHBhcnNlIHRoZSBganNvbmAgZGF0YSB0eXBlIGludG9cbiAqIEphdmFTY3JpcHQgSlNPTiB2YWx1ZXMgbGlrZSBvYmplY3RzIGFuZCBhcnJheXMuIFNvbWUgZGlhbGVjdHMgbWlnaHQgc2ltcGx5IHJldHVyblxuICogdGhlIGRhdGEgYXMgYSBKU09OIHN0cmluZy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYFxuICogdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpzb25PYmplY3RGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvcG9zdGdyZXMnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uT2JqZWN0RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLndoZXJlKCdwZXQuaXNfZmF2b3JpdGUnLCAnPScsIHRydWUpXG4gKiAgICAgKS5hcygnZmF2b3JpdGVfcGV0JylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwgKFxuICogICBzZWxlY3QgdG9fanNvbihvYmopIGZyb20gKFxuICogICAgIHNlbGVjdCBcInBldFwiLlwiaWRcIiBhcyBcInBldF9pZFwiLCBcInBldFwiLlwibmFtZVwiXG4gKiAgICAgZnJvbSBcInBldFwiXG4gKiAgICAgd2hlcmUgXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIlxuICogICAgIGFuZCBcInBldFwiLlwiaXNfZmF2b3JpdGVcIiA9ICQxXG4gKiAgICkgYXMgb2JqXG4gKiApIGFzIFwiZmF2b3JpdGVfcGV0XCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uT2JqZWN0RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCB0b19qc29uKG9iaikgZnJvbSAke2V4cHJ9IGFzIG9iailgO1xufVxuLyoqXG4gKiBUaGUgUG9zdGdyZVNRTCBganNvbl9idWlsZF9vYmplY3RgIGZ1bmN0aW9uLlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBmdWxseSB3b3JrIHdpdGggdGhlIGJ1aWx0LWluIGBQb3N0Z3Jlc0RpYWxlY3RgLlxuICogV2hpbGUgdGhlIHByb2R1Y2VkIFNRTCBpcyBjb21wYXRpYmxlIHdpdGggYWxsIFBvc3RncmVTUUwgZGF0YWJhc2VzLCBzb21lIHRoaXJkLXBhcnR5IGRpYWxlY3RzXG4gKiBtYXkgbm90IHBhcnNlIHRoZSBuZXN0ZWQgSlNPTiBpbnRvIG9iamVjdHMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgeyBqc29uQnVpbGRPYmplY3QgfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25CdWlsZE9iamVjdCh7XG4gKiAgICAgICBmaXJzdDogZWIucmVmKCdmaXJzdF9uYW1lJyksXG4gKiAgICAgICBsYXN0OiBlYi5yZWYoJ2xhc3RfbmFtZScpLFxuICogICAgICAgZnVsbDogc3FsPHN0cmluZz5gZmlyc3RfbmFtZSB8fFx1MDBBMCcgJyB8fCBsYXN0X25hbWVgXG4gKiAgICAgfSkuYXMoJ25hbWUnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5uYW1lLmZpcnN0XG4gKiByZXN1bHRbMF0/Lm5hbWUubGFzdFxuICogcmVzdWx0WzBdPy5uYW1lLmZ1bGxcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIGpzb25fYnVpbGRfb2JqZWN0KFxuICogICAnZmlyc3QnLCBmaXJzdF9uYW1lLFxuICogICAnbGFzdCcsIGxhc3RfbmFtZSxcbiAqICAgJ2Z1bGwnLCBmaXJzdF9uYW1lIHx8ICcgJyB8fCBsYXN0X25hbWVcbiAqICkgYXMgXCJuYW1lXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQnVpbGRPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIHNxbCBganNvbl9idWlsZF9vYmplY3QoJHtzcWwuam9pbihPYmplY3Qua2V5cyhvYmopLmZsYXRNYXAoKGspID0+IFtzcWwubGl0KGspLCBvYmpba11dKSl9KWA7XG59XG4vKipcbiAqIFRoZSBQb3N0Z3JlU1FMIGBtZXJnZV9hY3Rpb25gIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaW4gYSBgcmV0dXJuaW5nYCBjbGF1c2UgdG8gZ2V0IHRoZSBhY3Rpb24gdGhhdCB3YXNcbiAqIHBlcmZvcm1lZCBpbiBhIGBtZXJnZUludG9gIHF1ZXJ5LiBUaGUgZnVuY3Rpb24gcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZ1xuICogc3RyaW5nczogYCdJTlNFUlQnYCwgYCdVUERBVEUnYCwgb3IgYCdERUxFVEUnYC5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbWVyZ2VBY3Rpb24gfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAubWVyZ2VJbnRvKCdwZXJzb24gYXMgcCcpXG4gKiAgIC51c2luZygncGVyc29uX2JhY2t1cCBhcyBwYicsICdwLmlkJywgJ3BiLmlkJylcbiAqICAgLndoZW5NYXRjaGVkKClcbiAqICAgLnRoZW5VcGRhdGVTZXQoKHsgcmVmIH0pID0+ICh7XG4gKiAgICAgZmlyc3RfbmFtZTogcmVmKCdwYi5maXJzdF9uYW1lJyksXG4gKiAgICAgdXBkYXRlZF9hdDogcmVmKCdwYi51cGRhdGVkX2F0JykuJGNhc3RUbzxzdHJpbmcgfCBudWxsPigpLFxuICogICB9KSlcbiAqICAgLndoZW5Ob3RNYXRjaGVkKClcbiAqICAgLnRoZW5JbnNlcnRWYWx1ZXMoKHsgcmVmfSkgPT4gKHtcbiAqICAgICBpZDogcmVmKCdwYi5pZCcpLFxuICogICAgIGZpcnN0X25hbWU6IHJlZigncGIuZmlyc3RfbmFtZScpLFxuICogICAgIGNyZWF0ZWRfYXQ6IHJlZigncGIudXBkYXRlZF9hdCcpLFxuICogICAgIHVwZGF0ZWRfYXQ6IHJlZigncGIudXBkYXRlZF9hdCcpLiRjYXN0VG88c3RyaW5nIHwgbnVsbD4oKSxcbiAqICAgfSkpXG4gKiAgIC5yZXR1cm5pbmcoW21lcmdlQWN0aW9uKCkuYXMoJ2FjdGlvbicpLCAncC5pZCcsICdwLnVwZGF0ZWRfYXQnXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXS5hY3Rpb25cbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIG1lcmdlIGludG8gXCJwZXJzb25cIiBhcyBcInBcIlxuICogdXNpbmcgXCJwZXJzb25fYmFja3VwXCIgYXMgXCJwYlwiIG9uIFwicFwiLlwiaWRcIiA9IFwicGJcIi5cImlkXCJcbiAqIHdoZW4gbWF0Y2hlZCB0aGVuIHVwZGF0ZSBzZXRcbiAqICAgXCJmaXJzdF9uYW1lXCIgPSBcInBiXCIuXCJmaXJzdF9uYW1lXCIsXG4gKiAgIFwidXBkYXRlZF9hdFwiID0gXCJwYlwiLlwidXBkYXRlZF9hdFwiOjp0ZXh0XG4gKiB3aGVuIG5vdCBtYXRjaGVkIHRoZW4gaW5zZXJ0IHZhbHVlcyAoXCJpZFwiLCBcImZpcnN0X25hbWVcIiwgXCJjcmVhdGVkX2F0XCIsIFwidXBkYXRlZF9hdFwiKVxuICogdmFsdWVzIChcInBiXCIuXCJpZFwiLCBcInBiXCIuXCJmaXJzdF9uYW1lXCIsIFwicGJcIi5cInVwZGF0ZWRfYXRcIiwgXCJwYlwiLlwidXBkYXRlZF9hdFwiKVxuICogcmV0dXJuaW5nIG1lcmdlX2FjdGlvbigpIGFzIFwiYWN0aW9uXCIsIFwicFwiLlwiaWRcIiwgXCJwXCIuXCJ1cGRhdGVkX2F0XCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBY3Rpb24oKSB7XG4gICAgcmV0dXJuIHNxbCBgbWVyZ2VfYWN0aW9uKClgO1xufVxuIiwgImltcG9ydCB7IHR5cGUgU2VsZWN0UXVlcnlCdWlsZGVyLCBzcWwgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSBcImt5c2VseS9oZWxwZXJzL3Bvc3RncmVzXCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgY29tcGlsZSwgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgZ2V0UG9zdGdyZVNRTEJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5cbmNvbnN0IFJFR1VMQVJfVEFCTEVfS0lORCA9IFwiclwiO1xuY29uc3QgVklFV19UQUJMRV9LSU5EID0gXCJ2XCI7XG5jb25zdCBUQUJMRV9LSU5EUyA9IFtSRUdVTEFSX1RBQkxFX0tJTkQsIFZJRVdfVEFCTEVfS0lORF0gYXMgY29uc3Q7XG50eXBlIFRhYmxlS2luZCA9ICh0eXBlb2YgVEFCTEVfS0lORFMpW251bWJlcl07XG5cbmludGVyZmFjZSBEYXRhYmFzZSB7XG4gIC8qKiBjb2x1bW5zICovXG4gIFwicGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGVcIjoge1xuICAgIC8qKiBjb2x1bW4gb3JkZXIgbnVtYmVyIGluIGl0cyB0YWJsZSAqL1xuICAgIGF0dG51bTogbnVtYmVyO1xuICAgIC8qKiB0YWJsZS92aWV3IGlkZW50aWZpZXIgKi9cbiAgICBhdHRyZWxpZDogc3RyaW5nO1xuICAgIC8qKiBjb2x1bW4gbmFtZSAqL1xuICAgIGF0dG5hbWU6IHN0cmluZztcbiAgICAvKiogd2FzIHRoZSBjb2x1bW4gZHJvcHBlZC4gZHJvcHBlZCBjb2x1bW5zIG1pZ2h0IG5vdCBiZSAxMDAlIHJlbW92ZWQgaW1tZWRpYXRlbHkuICovXG4gICAgYXR0aXNkcm9wcGVkOiBib29sZWFuO1xuICAgIC8qKiBjb2x1bW4gZGF0YXR5cGUgaWRlbnRpZmllciAqL1xuICAgIGF0dHR5cGlkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGlvbiBmbGFnIGZvciBjb21wdXRlZCBjb2x1bW5zOlxuICAgICAqICcnIChlbXB0eSkgZm9yIHJlZ3VsYXIgY29sdW1ucyxcbiAgICAgKiAncycgZm9yIFNUT1JFRCBnZW5lcmF0ZWQgY29sdW1ucyAoUG9zdGdyZXMgR0VORVJBVEVEIEFMV0FZUyBBUykuXG4gICAgICovXG4gICAgYXR0Z2VuZXJhdGVkOiBcIlwiIHwgXCJzXCI7XG4gICAgLyoqIE5PVCBOVUxMIGNvbnN0cmFpbnQ6IHRydWUgaWYgdGhlIGNvbHVtbiBoYXMgYSBOT1QgTlVMTCBjb25zdHJhaW50ICovXG4gICAgYXR0bm90bnVsbDogYm9vbGVhbjtcbiAgfTtcbiAgLyoqIHJlc291cmNlcywgZS5nLiB0YWJsZXMsIHNlcXVlbmNlcywgZXRjLiAqL1xuICBcInBnX2NhdGFsb2cucGdfY2xhc3NcIjoge1xuICAgIC8qKiByZXNvdXJjZSBpZCAqL1xuICAgIG9pZDogbnVtYmVyO1xuICAgIC8qKiByZXNvdXJjZSBuYW1lICovXG4gICAgcmVsbmFtZTogc3RyaW5nO1xuICAgIC8qKiBzY2hlbWEgaWQgKi9cbiAgICByZWxuYW1lc3BhY2U6IG51bWJlcjtcbiAgICAvKiogcmVzb3VyY2Uga2luZDogcmVndWxhciB0YWJsZSwgdmlldyAqL1xuICAgIHJlbGtpbmQ6IFRhYmxlS2luZDtcbiAgfTtcbiAgLyoqIGVudW0gdHlwZXMnIHZhbHVlcyAqL1xuICBcInBnX2NhdGFsb2cucGdfZW51bVwiOiB7XG4gICAgLyoqIGVudW0gdmFsdWUgKi9cbiAgICBlbnVtbGFiZWw6IHN0cmluZztcbiAgICAvKiogZW51bSdzIHR5cGUgaWQgKi9cbiAgICBlbnVtdHlwaWQ6IG51bWJlcjtcbiAgfTtcbiAgLyoqIHNjaGVtYXMgKi9cbiAgXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZVwiOiB7XG4gICAgLyoqIHNjaGVtYSBuYW1lICovXG4gICAgbnNwbmFtZTogc3RyaW5nO1xuICAgIC8qKiBzY2hlbWEgaWQgKi9cbiAgICBvaWQ6IG51bWJlcjtcbiAgfTtcbiAgLyoqIGRhdGF0eXBlcyAqL1xuICBcInBnX2NhdGFsb2cucGdfdHlwZVwiOiB7XG4gICAgLyoqIHR5cGUgaWQgKi9cbiAgICBvaWQ6IG51bWJlcjtcbiAgICAvKiogdHlwZSBuYW1lICovXG4gICAgdHlwbmFtZTogc3RyaW5nO1xuICAgIC8qKiB0eXBlJ3Mgc2NoZW1hIChha2EgbmFtZXNwYWNlKSBpZCAqL1xuICAgIHR5cG5hbWVzcGFjZTogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIHR5cGUncyBraW5kXG4gICAgICpcbiAgICAgKiAnZScgLSBlbnVtIHR5cGVcbiAgICAgKi9cbiAgICB0eXB0eXBlOiBcImVcIiB8IChzdHJpbmcgJiB7fSk7XG4gIH07XG4gIC8qKiBjb25zdHJhaW50cyAqL1xuICBcInBnX2NhdGFsb2cucGdfY29uc3RyYWludFwiOiB7XG4gICAgLyoqIHJlbGF0aW9uICh0YWJsZSkgaWQgd2hpY2ggdGhpcyBjb25zdHJhaW50IHdhcyBjcmVhdGVkIGZvciAqL1xuICAgIGNvbnJlbGlkOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogY29uc3RyYWludCB0eXBlLlxuICAgICAqXG4gICAgICogYCdwJ2AgLSBwcmltYXJ5IGtleSBjb25zdHJhaW50LlxuICAgICAqIGAnZidgIC0gZm9yZWlnbiBrZXkgY29uc3RyYWludC5cbiAgICAgKi9cbiAgICBjb250eXBlOiBcInBcIiB8IFwiZlwiIHwgKHN0cmluZyAmIHt9KTtcbiAgICAvKipcbiAgICAgKiBhbiBvcmRlcmVkIGFycmF5IG9mIGNvbHVtbnMgaW5jbHVkZWQgaW4gdGhlIGNvbnN0cmFpbnQuXG4gICAgICpcbiAgICAgKiB0aGUgY29sdW1ucyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlaXIgb3JkaW5hbCBudW1iZXIgKGBhdHRudW1gKSBpbiB0aGVpciByZWxhdGlvbiAodGFibGUpLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgYCd7MSwzfSdgIC0gYSBjb25zdHJhaW50IHdpdGggMiBjb2x1bW5zLCB0aGUgMXN0ICYgM3JkIGluIHRoZWlyIHRhYmxlLlxuICAgICAqL1xuICAgIGNvbmtleTogbnVtYmVyW107XG4gICAgLyoqIGlmIGEgZm9yZWlnbiBrZXksIHRoZSByZWZlcmVuY2VkIHRhYmxlICovXG4gICAgY29uZnJlbGlkOiBudW1iZXI7XG4gICAgLyoqIGlmIGEgZm9yZWlnbiBrZXksIHRoZSByZWZlcmVuY2VkIGNvbHVtbnMgKi9cbiAgICBjb25ma2V5OiBudW1iZXJbXTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCByZXR1cm5zIG1ldGFkYXRhIGZvciBhbGwgdXNlci1kZWZpbmVkIHRhYmxlcyBhbmQgdmlld3MgaW4gdGhlIGRhdGFiYXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPikge1xuICByZXR1cm4gY29tcGlsZShcbiAgICBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxEYXRhYmFzZT4ocmVxdWlyZW1lbnRzKVxuICAgICAgLnNlbGVjdEZyb20oXCJwZ19jYXRhbG9nLnBnX2NsYXNzIGFzIGNsc1wiKVxuICAgICAgLmlubmVySm9pbihcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIGFzIG5zXCIsIFwiY2xzLnJlbG5hbWVzcGFjZVwiLCBcIm5zLm9pZFwiKVxuICAgICAgLiRjYWxsKGV4Y2x1ZGVTeXN0ZW1UYWJsZXMpXG4gICAgICAvLyByZWd1bGFyIHRhYmxlcyBvciB2aWV3c1xuICAgICAgLndoZXJlKFwiY2xzLnJlbGtpbmRcIiwgXCJpblwiLCBUQUJMRV9LSU5EUylcbiAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgIFwibnMubnNwbmFtZSBhcyBzY2hlbWFcIixcbiAgICAgICAgXCJjbHMucmVsbmFtZSBhcyBuYW1lXCIsXG4gICAgICAgIGpzb25BcnJheUZyb20oXG4gICAgICAgICAgZWJcbiAgICAgICAgICAgIC5zZWxlY3RGcm9tKFwicGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYXMgYXR0XCIpXG4gICAgICAgICAgICAuaW5uZXJKb2luKFwicGdfY2F0YWxvZy5wZ190eXBlIGFzIHR5cFwiLCBcInR5cC5vaWRcIiwgXCJhdHQuYXR0dHlwaWRcIilcbiAgICAgICAgICAgIC5pbm5lckpvaW4oXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBhcyB0bnNcIiwgXCJ0bnMub2lkXCIsIFwidHlwLnR5cG5hbWVzcGFjZVwiKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19jb25zdHJhaW50IGFzIHBrX2NvblwiLCAoamIpID0+XG4gICAgICAgICAgICAgIGpiXG4gICAgICAgICAgICAgICAgLm9uKFwicGtfY29uLmNvbnR5cGVcIiwgXCI9XCIsIFwicFwiKVxuICAgICAgICAgICAgICAgIC5vblJlZihcInBrX2Nvbi5jb25yZWxpZFwiLCBcIj1cIiwgXCJjbHMub2lkXCIpXG4gICAgICAgICAgICAgICAgLm9uKChlYikgPT4gZWIoXCJhdHQuYXR0bnVtXCIsIFwiPVwiLCBlYi5mbi5hbnkoXCJwa19jb24uY29ua2V5XCIpKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJwZ19jYXRhbG9nLnBnX2NvbnN0cmFpbnQgYXMgZmtfY29uXCIsIChqYikgPT5cbiAgICAgICAgICAgICAgamJcbiAgICAgICAgICAgICAgICAub24oXCJma19jb24uY29udHlwZVwiLCBcIj1cIiwgXCJmXCIpXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwiZmtfY29uLmNvbnJlbGlkXCIsIFwiPVwiLCBcImNscy5vaWRcIilcbiAgICAgICAgICAgICAgICAub24oKGViKSA9PiBlYihcImF0dC5hdHRudW1cIiwgXCI9XCIsIGViLmZuLmFueShcImZrX2Nvbi5jb25rZXlcIikpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfY2xhc3MgYXMgZmtfY2xzXCIsIFwiZmtfY2xzLm9pZFwiLCBcImZrX2Nvbi5jb25mcmVsaWRcIilcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIGFzIGZrX25zXCIsIFwiZmtfbnMub2lkXCIsIFwiZmtfY2xzLnJlbG5hbWVzcGFjZVwiKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYXMgZmtfYXR0XCIsIChqYikgPT5cbiAgICAgICAgICAgICAgamJcbiAgICAgICAgICAgICAgICAub25SZWYoXCJma19hdHQuYXR0cmVsaWRcIiwgXCI9XCIsIFwiZmtfY2xzLm9pZFwiKVxuICAgICAgICAgICAgICAgIC8vIFVzZSBhIGNhbGxiYWNrIGZvciB0aGUgLm9uKCkgY29uZGl0aW9uIHRvIGVuc3VyZSBjb3JyZWN0IGNvbnRleHQgZm9yIHR5cGVzXG4gICAgICAgICAgICAgICAgLm9uKChvbl9lYikgPT4gb25fZWIoXCJma19hdHQuYXR0bnVtXCIsIFwiPVwiLCBvbl9lYi5mbi5hbnkoXCJma19jb24uY29uZmtleVwiKSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLndoZXJlUmVmKFwiYXR0LmF0dHJlbGlkXCIsIFwiPVwiLCBcImNscy5vaWRcIilcbiAgICAgICAgICAgIC8vIGV4Y2x1ZGUgc3lzdGVtIGNvbHVtbnNcbiAgICAgICAgICAgIC53aGVyZShcImF0dC5hdHRudW1cIiwgXCI+PVwiLCAwKVxuICAgICAgICAgICAgLndoZXJlKFwiYXR0LmF0dGlzZHJvcHBlZFwiLCBcIiE9XCIsIHRydWUpXG4gICAgICAgICAgICAuc2VsZWN0KFtcbiAgICAgICAgICAgICAgXCJhdHQuYXR0bmFtZSBhcyBuYW1lXCIsXG4gICAgICAgICAgICAgIFwidHlwLnR5cG5hbWUgYXMgZGF0YXR5cGVcIixcbiAgICAgICAgICAgICAgXCJ0bnMubnNwbmFtZSBhcyBkYXRhdHlwZV9zY2hlbWFcIixcbiAgICAgICAgICAgICAgXCJma19ucy5uc3BuYW1lIGFzIGZvcmVpZ25fa2V5X3NjaGVtYVwiLFxuICAgICAgICAgICAgICBcImZrX2Nscy5yZWxuYW1lIGFzIGZvcmVpZ25fa2V5X3RhYmxlXCIsXG4gICAgICAgICAgICAgIFwiZmtfYXR0LmF0dG5hbWUgYXMgZm9yZWlnbl9rZXlfY29sdW1uXCIsXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICAgLnNlbGVjdCgoZWIpID0+IFtcbiAgICAgICAgICAgICAgZWIoXCJwa19jb24uY29ua2V5XCIsIFwiaXMgbm90XCIsIG51bGwpLiRjYXN0VG88Ym9vbGVhbj4oKS5hcyhcInBrXCIpLFxuICAgICAgICAgICAgICBlYihcImF0dC5hdHRnZW5lcmF0ZWRcIiwgXCIhPVwiLCBcIlwiKS4kY2FzdFRvPGJvb2xlYW4+KCkuYXMoXCJjb21wdXRlZFwiKSxcbiAgICAgICAgICAgICAgZWIoXCJhdHQuYXR0bm90bnVsbFwiLCBcIiE9XCIsIHRydWUpLiRjYXN0VG88Ym9vbGVhbj4oKS5hcyhcIm51bGxhYmxlXCIpLFxuICAgICAgICAgICAgICBlYi5mblxuICAgICAgICAgICAgICAgIC5jb2FsZXNjZShcbiAgICAgICAgICAgICAgICAgIGViXG4gICAgICAgICAgICAgICAgICAgIC5zZWxlY3RGcm9tKFwicGdfY2F0YWxvZy5wZ19lbnVtIGFzIGVubVwiKVxuICAgICAgICAgICAgICAgICAgICAud2hlcmVSZWYoXCJlbm0uZW51bXR5cGlkXCIsIFwiPVwiLCBcInR5cC5vaWRcIilcbiAgICAgICAgICAgICAgICAgICAgLnNlbGVjdCgoZWIpID0+IGViLmZuLmpzb25BZ2coZWIucmVmKFwiZW5tLmVudW1sYWJlbFwiKSkuYXMoXCJvXCIpKSxcbiAgICAgICAgICAgICAgICAgIHNxbDxzdHJpbmdbXT5gJ1tdJ2AsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hcyhcIm9wdGlvbnNcIiksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgKS5hcyhcImNvbHVtbnNcIiksXG4gICAgICBdKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUYWJsZXNRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBzY2hlbWE6IFwiem9vXCIsXG4gICAgICBuYW1lOiBcImFuaW1hbHNcIixcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJpbnQ0XCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogdHJ1ZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NoZW1hOiBcInB1YmxpY1wiLFxuICAgICAgbmFtZTogXCJ1c2Vyc1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImludDRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJkZWxldGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInJvbGVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVfcm9sZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXSBhcyBjb25zdCBzYXRpc2ZpZXMgUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRhYmxlc1F1ZXJ5Pjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjdXJyZW50IHRpbWV6b25lIHNldHRpbmcgb2YgdGhlIFBvc3RncmVTUUwgZGF0YWJhc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lem9uZVF1ZXJ5KCkge1xuICBjb25zdCBidWlsZGVyID0gZ2V0UG9zdGdyZVNRTEJ1aWxkZXIoKTtcblxuICByZXR1cm4gY29tcGlsZShidWlsZGVyLnNlbGVjdE5vRnJvbShidWlsZGVyLmZuPHN0cmluZz4oXCJjdXJyZW50X3NldHRpbmdcIiwgW3NxbC5saXQoXCJ0aW1lem9uZVwiKV0pLmFzKFwidGltZXpvbmVcIikpKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUaW1lem9uZVF1ZXJ5KCkge1xuICByZXR1cm4gW3sgdGltZXpvbmU6IFwiVVRDXCIgfV0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUaW1lem9uZVF1ZXJ5Pjtcbn1cblxuLyoqXG4gKiBXZSBkb24ndCB3YW50IFBvc3RncmVTUUwgaW50ZXJuYWxzIGluIGludHJvc3BlY3Rpb24gcmVzdWx0cy4gVG8gYmUgdXNlZCBpbiBgJGNhbGxgLlxuICovXG5mdW5jdGlvbiBleGNsdWRlU3lzdGVtVGFibGVzPFxuICBUIGV4dGVuZHMgU2VsZWN0UXVlcnlCdWlsZGVyPFxuICAgIERhdGFiYXNlICYgeyBuczogRGF0YWJhc2VbXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZVwiXTsgY2xzOiBEYXRhYmFzZVtcInBnX2NhdGFsb2cucGdfY2xhc3NcIl0gfSxcbiAgICBcIm5zXCIgfCBcImNsc1wiLFxuICAgIG9iamVjdFxuICA+LFxuPihxYjogVCk6IFQge1xuICByZXR1cm4gcWIud2hlcmUoYG5zLm5zcG5hbWVgLCBgIX5gLCBgXnBnX2ApLndoZXJlKGBucy5uc3BuYW1lYCwgYCE9YCwgYGluZm9ybWF0aW9uX3NjaGVtYWApIGFzIG5ldmVyO1xufVxuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRGVsZXRlUmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJFcnJvcixcbiAgdHlwZSBBZGFwdGVySW5zZXJ0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJRdWVyeVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyVXBkYXRlUmVzdWx0LFxuICB0eXBlIENvbHVtbixcbiAgY3JlYXRlQWRhcHRlckVycm9yLFxuICB0eXBlIEZpbHRlck9wZXJhdG9yLFxuICB0eXBlIFRhYmxlLFxufSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRvciB9IGZyb20gXCIuLi9leGVjdXRvclwiO1xuaW1wb3J0IHR5cGUgeyBRdWVyeSwgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IFBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSB9IGZyb20gXCIuL2RhdGF0eXBlXCI7XG5pbXBvcnQgeyBnZXREZWxldGVRdWVyeSwgZ2V0SW5zZXJ0UXVlcnksIGdldFNlbGVjdFF1ZXJ5LCBnZXRVcGRhdGVRdWVyeSB9IGZyb20gXCIuL2RtbFwiO1xuaW1wb3J0IHsgZ2V0VGFibGVzUXVlcnksIGdldFRpbWV6b25lUXVlcnksIG1vY2tUYWJsZXNRdWVyeSwgbW9ja1RpbWV6b25lUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zdGdyZXNBZGFwdGVyUmVxdWlyZW1lbnRzIHtcbiAgZXhlY3V0b3I6IEV4ZWN1dG9yO1xuICBub1BhcmFtZXRlcnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9zdGdyZXNBZGFwdGVyKHJlcXVpcmVtZW50czogUG9zdGdyZXNBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLm90aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0U2NoZW1hOiBcInB1YmxpY1wiLFxuICAgIGFzeW5jIGludHJvc3BlY3Qob3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0YWJsZXNRdWVyeSA9IGdldFRhYmxlc1F1ZXJ5KG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgdGltZXpvbmVRdWVyeSA9IGdldFRpbWV6b25lUXVlcnkoKTtcblxuICAgICAgICBjb25zdCBbW3RhYmxlc0Vycm9yLCB0YWJsZXNdLCBbdGltZXpvbmVFcnJvciwgdGltZXpvbmVzXV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0YWJsZXNRdWVyeSwgb3B0aW9ucyksXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0aW1lem9uZVF1ZXJ5LCBvcHRpb25zKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHRhYmxlc0Vycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB0YWJsZXNFcnJvciwgcXVlcnk6IHRhYmxlc1F1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWV6b25lRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRpbWV6b25lRXJyb3IsIHF1ZXJ5OiB0aW1lem9uZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZXpvbmUgPSB0aW1lem9uZXNbMF0/LnRpbWV6b25lO1xuXG4gICAgICAgIGlmICghdGltZXpvbmUpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IG5ldyBFcnJvcihcIlRpbWV6b25lIG5vdCBmb3VuZFwiKSwgcXVlcnk6IHRpbWV6b25lUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyB0YWJsZXMsIHRpbWV6b25lLCBxdWVyeTogdGFibGVzUXVlcnkgfSldO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHF1ZXJ5KGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJRdWVyeVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0U2VsZWN0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyBmaWx0ZXJlZFJvd0NvdW50OiByZXN1bHRzWzBdPy5vaWQgfHwgXCIwXCIsIHJvd3M6IHJlc3VsdHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGluc2VydChkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW5zZXJ0UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRJbnNlcnRRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IFtlcnJvciwgcm93c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3MsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlKGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJVcGRhdGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFVwZGF0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcm93XSA9IHJlc3VsdHM7XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjdXN0b20gZXJyb3I/XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJVcGRhdGUgZmFpbGVkXCIpLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3csIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGRlbGV0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyRGVsZXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXREZWxldGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IFtlcnJvcl0gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IC4uLmRldGFpbHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnRyb3NwZWN0aW9uKGFyZ3M6IHsgdGFibGVzOiBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+OyB0aW1lem9uZTogc3RyaW5nOyBxdWVyeTogUXVlcnkgfSkge1xuICBjb25zdCB7IHRhYmxlcywgdGltZXpvbmUsIHF1ZXJ5IH0gPSBhcmdzO1xuXG4gIHJldHVybiB0YWJsZXMucmVkdWNlKFxuICAgIChyZXN1bHQsIHJvdykgPT4ge1xuICAgICAgY29uc3QgeyBzY2hlbWFzIH0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0gPSByb3c7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zLnJlZHVjZShcbiAgICAgICAgKGNvbHVtbnMsIGNvbHVtbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZGF0YXR5cGUsIGRhdGF0eXBlX3NjaGVtYSwgbmFtZTogY29sdW1uTmFtZSwgb3B0aW9ucywgbnVsbGFibGUgfSA9IGNvbHVtbjtcblxuICAgICAgICAgIGNvbnN0IGlzQXJyYXkgPSBkYXRhdHlwZS5zdGFydHNXaXRoKFwiX1wiKTtcbiAgICAgICAgICBjb25zdCBzdHJpcHBlZERhdGFUeXBlID0gaXNBcnJheSA/IGRhdGF0eXBlLnNsaWNlKDEpIDogZGF0YXR5cGU7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29sdW1ucyxcbiAgICAgICAgICAgIFtjb2x1bW5OYW1lXToge1xuICAgICAgICAgICAgICBkYXRhdHlwZToge1xuICAgICAgICAgICAgICAgIC4uLihQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEFbc3RyaXBwZWREYXRhVHlwZV0gfHwge1xuICAgICAgICAgICAgICAgICAgZ3JvdXA6IG9wdGlvbnMubGVuZ3RoID4gMCA/IFwiZW51bVwiIDogXCJyYXdcIixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBpc0FycmF5LFxuICAgICAgICAgICAgICAgIGlzTmF0aXZlOiBkYXRhdHlwZV9zY2hlbWEgPT09IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgICAgICAgIG5hbWU6IGlzQXJyYXkgPyBgJHtzdHJpcHBlZERhdGFUeXBlfVtdYCA6IHN0cmlwcGVkRGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IGRhdGF0eXBlX3NjaGVtYSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaXNDb21wdXRlZDogY29sdW1uLmNvbXB1dGVkLFxuICAgICAgICAgICAgICBpc0luUHJpbWFyeUtleTogY29sdW1uLnBrLFxuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICBudWxsYWJsZSxcbiAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICBma1NjaGVtYTogY29sdW1uLmZvcmVpZ25fa2V5X3NjaGVtYSxcbiAgICAgICAgICAgICAgZmtUYWJsZTogY29sdW1uLmZvcmVpZ25fa2V5X3RhYmxlLFxuICAgICAgICAgICAgICBma0NvbHVtbjogY29sdW1uLmZvcmVpZ25fa2V5X2NvbHVtbixcbiAgICAgICAgICAgIH0gYXMgY29uc3Qgc2F0aXNmaWVzIENvbHVtbixcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBUYWJsZVtcImNvbHVtbnNcIl0sXG4gICAgICApO1xuXG4gICAgICBpZiAoc2NoZW1hc1tzY2hlbWFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2NoZW1hc1tzY2hlbWFdID0ge1xuICAgICAgICAgIG5hbWU6IHNjaGVtYSxcbiAgICAgICAgICB0YWJsZXM6IHt9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBzY2hlbWFzW3NjaGVtYV0udGFibGVzW3RhYmxlTmFtZV0gPSB7XG4gICAgICAgIGNvbHVtbnM6IGNvbHVtbnNSZWNvcmQsXG4gICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjaGVtYXM6IHsgcHVibGljOiB7IHRhYmxlczoge30sIG5hbWU6IFwicHVibGljXCIgfSB9LFxuICAgICAgdGltZXpvbmUsXG4gICAgICBmaWx0ZXJPcGVyYXRvcnMsXG4gICAgICBxdWVyeSxcbiAgICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCBhcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCxcbiAgKTtcbn1cblxuY29uc3QgZmlsdGVyT3BlcmF0b3JzID0gW1xuICBcIj1cIixcbiAgXCIhPVwiLFxuICBcIj5cIixcbiAgXCI+PVwiLFxuICBcIjxcIixcbiAgXCI8PVwiLFxuICBcImlzXCIsXG4gIFwiaXMgbm90XCIsXG4gIFwibGlrZVwiLFxuICBcIm5vdCBsaWtlXCIsXG4gIFwiaWxpa2VcIixcbiAgXCJub3QgaWxpa2VcIixcbl0gc2F0aXNmaWVzIEZpbHRlck9wZXJhdG9yW107XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrSW50cm9zcGVjdCgpIHtcbiAgY29uc3QgdGFibGVzID0gbW9ja1RhYmxlc1F1ZXJ5KCk7XG4gIGNvbnN0IFt7IHRpbWV6b25lIH1dID0gbW9ja1RpbWV6b25lUXVlcnkoKTtcbiAgY29uc3QgcXVlcnkgPSB7IHBhcmFtZXRlcnM6IFtdLCBzcWw6IFwiPG1vY2tlZD5cIiB9IGFzIFF1ZXJ5O1xuXG4gIHJldHVybiBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgdGFibGVzLCB0aW1lem9uZSwgcXVlcnkgfSkgYXMge1xuICAgIC8vIGJlc3QgZWZmb3J0LCBubyBuZWVkIGdvIG92ZXJib2FyZC5cbiAgICBzY2hlbWFzOiB7XG4gICAgICBbSyBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcInNjaGVtYVwiXV06IHtcbiAgICAgICAgbmFtZTogSztcbiAgICAgICAgdGFibGVzOiB7XG4gICAgICAgICAgW1QgaW4gKHR5cGVvZiB0YWJsZXMpW251bWJlcl1bXCJuYW1lXCJdXTogVGFibGU7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gICAgdGltZXpvbmU6IHR5cGVvZiB0aW1lem9uZTtcbiAgICBmaWx0ZXJPcGVyYXRvcnM6IEZpbHRlck9wZXJhdG9yW107XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI2T0E2VE8sU0FBU0EsRUFBbUJDLEVBQXVDLENBQ3hFLEdBQU0sQ0FBRSxNQUFBQyxFQUFPLE1BQUFDLENBQU0sRUFBSUYsRUFFbkJHLEVBQWVGLEVBRXJCLE9BQUFFLEVBQWEsTUFBUUQsRUFFZCxDQUFDQyxDQUFZLENBQ3RCLENDblVPLElBQU1DLEdBQTZFLENBQ3hGLEtBQU0sQ0FDSixNQUFPLFNBQ1QsRUFDQSxRQUFTLENBQ1AsTUFBTyxTQUNULEVBQ0EsTUFBTyxDQUNMLE1BQU8sUUFDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFFBQ1QsRUFDQSxPQUFRLENBQ04sTUFBTyxRQUNULEVBSUEsS0FBTSxDQUNKLE1BQU8sVUFDVCxFQUlBLFNBQVUsQ0FDUixNQUFPLFFBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxRQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sUUFDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFFBQ1QsRUFNQSxLQUFNLENBQ0osTUFBTyxNQUNULEVBTUEsVUFBVyxDQUNULE1BQU8sVUFDVCxFQU1BLFlBQWEsQ0FDWCxNQUFPLFVBQ1QsRUFNQSw4QkFBK0IsQ0FDN0IsTUFBTyxVQUNULEVBTUEsMkJBQTRC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RSxPQUFRLENBQUMsRUFBRyxLQUFNLFFBQVMsQ0FBRSxFQUNsRCxTQUFBYixFQUNBLGdCQUFBMkIsR0FDQSxNQUFBdkIsQ0FDRixDQUNGLENBQ0YsQ0FFQSxJQUFNdUIsR0FBa0IsQ0FDdEIsSUFDQSxLQUNBLElBQ0EsS0FDQSxJQUNBLEtBQ0EsS0FDQSxTQUNBLE9BQ0EsV0FDQSxRQUNBLFdBQ0YsRUFLTyxTQUFTQyxJQUFpQixDQUMvQixJQUFNaEMsRUFBU2lDLEdBQWdCLEVBQ3pCLENBQUMsQ0FBRSxTQUFBN0IsQ0FBUyxDQUFDLEVBQUk4QixHQUFrQixFQUd6QyxPQUFPN0IsR0FBb0IsQ0FBRSxPQUFBTCxFQUFRLFNBQUFJLEVBQVUsTUFGakMsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFLLFVBQVcsQ0FFSyxDQUFDLENBY3hEIiwKICAibmFtZXMiOiBbImNyZWF0ZUFkYXB0ZXJFcnJvciIsICJhcmdzIiwgImVycm9yIiwgInF1ZXJ5IiwgImFkYXB0ZXJFcnJvciIsICJQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEiLCAiUmF3QnVpbGRlckltcGwiLCAiX1Jhd0J1aWxkZXJJbXBsIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiYWxpYXMiLCAiQWxpYXNlZFJhd0J1aWxkZXJJbXBsIiwgInBsdWdpbiIsICIjdG9PcGVyYXRpb25Ob2RlIiwgIiNnZXRFeGVjdXRvciIsICJleGVjdXRvclByb3ZpZGVyIiwgIiNjb21waWxlIiwgImV4ZWN1dG9yIiwgIk5PT1BfUVVFUllfRVhFQ1VUT1IiLCAiY3JlYXRlUmF3QnVpbGRlciIsICIjcmF3QnVpbGRlciIsICIjYWxpYXMiLCAicmF3QnVpbGRlciIsICJBbGlhc05vZGUiLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgIklkZW50aWZpZXJOb2RlIiwgInNxbCIsICJzcWxGcmFnbWVudHMiLCAicGFyYW1ldGVycyIsICJjcmVhdGVSYXdCdWlsZGVyIiwgImNyZWF0ZVF1ZXJ5SWQiLCAiUmF3Tm9kZSIsICJwYXJzZVBhcmFtZXRlciIsICJjb2x1bW5SZWZlcmVuY2UiLCAicGFyc2VTdHJpbmdSZWZlcmVuY2UiLCAidmFsdWUiLCAicGFyc2VWYWx1ZUV4cHJlc3Npb24iLCAidGFibGVSZWZlcmVuY2UiLCAicGFyc2VUYWJsZSIsICJpZHMiLCAiZnJhZ21lbnRzIiwgIklkZW50aWZpZXJOb2RlIiwgIlZhbHVlTm9kZSIsICJhcnJheSIsICJzZXBhcmF0b3IiLCAibm9kZXMiLCAic2VwIiwgImkiLCAicGFyYW0iLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgIk9wZXJhdGlvbk5vZGVWaXNpdG9yIiwgIiN2aXNpdG9ycyIsICJmcmVlemUiLCAibm9kZSIsICJMSVRfV1JBUF9SRUdFWCIsICJEZWZhdWx0UXVlcnlDb21waWxlciIsICJPcGVyYXRpb25Ob2RlVmlzaXRvciIsICIjc3FsIiwgIiNwYXJhbWV0ZXJzIiwgIm5vZGUiLCAicXVlcnlJZCIsICJmcmVlemUiLCAid3JhcEluUGFyZW5zIiwgIlBhcmVuc05vZGUiLCAiSW5zZXJ0UXVlcnlOb2RlIiwgIkNyZWF0ZVRhYmxlTm9kZSIsICJDcmVhdGVWaWV3Tm9kZSIsICJTZXRPcGVyYXRpb25Ob2RlIiwgImV4cHJlc3Npb25zIiwgIm5vZGVzIiwgInNlcGFyYXRvciIsICJsYXN0SW5kZXgiLCAiaSIsICJyb290UXVlcnlOb2RlIiwgIlF1ZXJ5Tm9kZSIsICJpc1N1YlF1ZXJ5IiwgIk1lcmdlUXVlcnlOb2RlIiwgImxvZ09uY2UiLCAiXyIsICJpc1N0cmluZyIsICJ2YWx1ZXMiLCAiSk9JTl9UWVBFX1NRTCIsICJzcWxGcmFnbWVudHMiLCAicGFyYW1zIiwgImlzQm9vbGVhbiIsICJTRUxFQ1RfTU9ESUZJRVJfU1FMIiwgIk9wZXJhdG9yTm9kZSIsICJwYXRoTGVnIiwgImlzQXJyYXlMb2NhdGlvbiIsICJsZW4iLCAic3RyIiwgInBhcmFtZXRlciIsICJpZGVudGlmaWVyIiwgImxlZnRXcmFwIiwgInJpZ2h0V3JhcCIsICJzYW5pdGl6ZWQiLCAiYyIsICJ2YWx1ZSIsICJpc051bWJlciIsICJpc051bGwiLCAiaXNEYXRlIiwgImlzQmlnSW50IiwgImFyciIsICJsZWZ0IiwgInJpZ2h0IiwgIlNFTEVDVF9NT0RJRklFUl9QUklPUklUWSIsICJjb2x1bW5BbHRlcmF0aW9ucyIsICJEaWFsZWN0QWRhcHRlckJhc2UiLCAiSURfV1JBUF9SRUdFWCIsICJQb3N0Z3Jlc1F1ZXJ5Q29tcGlsZXIiLCAiRGVmYXVsdFF1ZXJ5Q29tcGlsZXIiLCAiaWRlbnRpZmllciIsICJMT0NLX0lEIiwgIlBvc3RncmVzQWRhcHRlciIsICJEaWFsZWN0QWRhcHRlckJhc2UiLCAiZGIiLCAiX29wdCIsICJzcWwiLCAiX2RiIiwgImdldFBvc3RncmVTUUxCdWlsZGVyIiwgInJlcXVpcmVtZW50cyIsICJnZXRCdWlsZGVyIiwgIlBvc3RncmVzQWRhcHRlciIsICJQb3N0Z3Jlc1F1ZXJ5Q29tcGlsZXIiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAiZGV0YWlscyIsICJyZXF1aXJlbWVudHMiLCAidGFibGUiLCAicm93cyIsICJ0YWJsZU5hbWUiLCAic2NoZW1hIiwgImNvbHVtbnMiLCAiYnVpbGRlciIsICJnZXRQb3N0Z3JlU1FMQnVpbGRlciIsICJjb2xzIiwgImVtcHR5Um93V29ya2Fyb3VuZCIsICJzcWwiLCAiY29tcGlsZSIsICJyb3ciLCAiZWIiLCAiZ2V0U2VsZWN0UXVlcnkiLCAicGFnZUluZGV4IiwgInBhZ2VTaXplIiwgInNvcnRPcmRlciIsICJmaWx0ZXIiLCAiY291bnRRdWVyeSIsICJxYiIsICJpdGVtIiwgImdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24iLCAiYnVpbGRCYXNlRXhwcmVzc2lvbkJ1aWxkZXIiLCAic3BlYyIsICJmaWx0ZXJzIiwgIm9yR3JvdXBzT2ZBbmRCdWlsZGVycyIsICJjdXJyZW50QW5kR3JvdXBCdWlsZGVycyIsICJpIiwgImFuZEV4cHJlc3Npb25zIiwgImdyb3VwIiwgIm1vY2tTZWxlY3RRdWVyeSIsICJnZXRVcGRhdGVRdWVyeSIsICJjaGFuZ2VzIiwgImFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzIiwgImdldERlbGV0ZVF1ZXJ5IiwgImpzb25BcnJheUZyb20iLCAiZXhwciIsICJzcWwiLCAiUkVHVUxBUl9UQUJMRV9LSU5EIiwgIlZJRVdfVEFCTEVfS0lORCIsICJUQUJMRV9LSU5EUyIsICJnZXRUYWJsZXNRdWVyeSIsICJyZXF1aXJlbWVudHMiLCAiY29tcGlsZSIsICJnZXRQb3N0Z3JlU1FMQnVpbGRlciIsICJleGNsdWRlU3lzdGVtVGFibGVzIiwgImViIiwgImpzb25BcnJheUZyb20iLCAiamIiLCAib25fZWIiLCAic3FsIiwgIm1vY2tUYWJsZXNRdWVyeSIsICJnZXRUaW1lem9uZVF1ZXJ5IiwgImJ1aWxkZXIiLCAibW9ja1RpbWV6b25lUXVlcnkiLCAicWIiLCAiY3JlYXRlUG9zdGdyZXNBZGFwdGVyIiwgInJlcXVpcmVtZW50cyIsICJleGVjdXRvciIsICJvdGhlclJlcXVpcmVtZW50cyIsICJvcHRpb25zIiwgInRhYmxlc1F1ZXJ5IiwgImdldFRhYmxlc1F1ZXJ5IiwgInRpbWV6b25lUXVlcnkiLCAiZ2V0VGltZXpvbmVRdWVyeSIsICJ0YWJsZXNFcnJvciIsICJ0YWJsZXMiLCAidGltZXpvbmVFcnJvciIsICJ0aW1lem9uZXMiLCAiY3JlYXRlQWRhcHRlckVycm9yIiwgInRpbWV6b25lIiwgImNyZWF0ZUludHJvc3BlY3Rpb24iLCAiZXJyb3IiLCAiZGV0YWlscyIsICJxdWVyeSIsICJnZXRTZWxlY3RRdWVyeSIsICJyZXN1bHRzIiwgImdldEluc2VydFF1ZXJ5IiwgInJvd3MiLCAiZ2V0VXBkYXRlUXVlcnkiLCAicm93IiwgImdldERlbGV0ZVF1ZXJ5IiwgImFyZ3MiLCAicmVzdWx0IiwgInNjaGVtYXMiLCAiY29sdW1ucyIsICJ0YWJsZU5hbWUiLCAic2NoZW1hIiwgImNvbHVtbnNSZWNvcmQiLCAiY29sdW1uIiwgImRhdGF0eXBlIiwgImRhdGF0eXBlX3NjaGVtYSIsICJjb2x1bW5OYW1lIiwgIm51bGxhYmxlIiwgImlzQXJyYXkiLCAic3RyaXBwZWREYXRhVHlwZSIsICJQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEiLCAiZmlsdGVyT3BlcmF0b3JzIiwgIm1vY2tJbnRyb3NwZWN0IiwgIm1vY2tUYWJsZXNRdWVyeSIsICJtb2NrVGltZXpvbmVRdWVyeSJdCn0K
@@ -1,5 +1,5 @@
1
- import { E as Executor, Q as Query, a as ExecuteOptions, b as QueryResult } from '../../index-C9ZnIXOd.cjs';
2
- import { E as Either } from '../../adapter-Bt_0JnjE.cjs';
1
+ import { Executor, ExecuteOptions } from '../index.cjs';
2
+ import { Q as Query, E as Either, a as QueryResult } from '../../query-Q-ZKX_Vr.cjs';
3
3
  import 'kysely';
4
4
 
5
5
  declare function deserializeRawResult(response: RawResponse, valueDeserializerFn?: (value: unknown, type: QueryIntrospectionBuiltinType, column: string) => unknown): DeserializedResponse;
@@ -1,5 +1,5 @@
1
- import { E as Executor, Q as Query, a as ExecuteOptions, b as QueryResult } from '../../index-B6_kEBLg.js';
2
- import { E as Either } from '../../adapter-Bt_0JnjE.js';
1
+ import { Executor, ExecuteOptions } from '../index.js';
2
+ import { Q as Query, E as Either, a as QueryResult } from '../../query-Q-ZKX_Vr.js';
3
3
  import 'kysely';
4
4
 
5
5
  declare function deserializeRawResult(response: RawResponse, valueDeserializerFn?: (value: unknown, type: QueryIntrospectionBuiltinType, column: string) => unknown): DeserializedResponse;
@@ -1,5 +1,5 @@
1
- import { E as Executor, Q as Query, a as ExecuteOptions, b as QueryResult } from '../../index-C9ZnIXOd.cjs';
2
- import { E as Either } from '../../adapter-Bt_0JnjE.cjs';
1
+ import { Executor, ExecuteOptions } from '../index.cjs';
2
+ import { Q as Query, E as Either, a as QueryResult } from '../../query-Q-ZKX_Vr.cjs';
3
3
  import 'kysely';
4
4
 
5
5
  interface StudioBFFClientProps {
@@ -1,5 +1,5 @@
1
- import { E as Executor, Q as Query, a as ExecuteOptions, b as QueryResult } from '../../index-B6_kEBLg.js';
2
- import { E as Either } from '../../adapter-Bt_0JnjE.js';
1
+ import { Executor, ExecuteOptions } from '../index.js';
2
+ import { Q as Query, E as Either, a as QueryResult } from '../../query-Q-ZKX_Vr.js';
3
3
  import 'kysely';
4
4
 
5
5
  interface StudioBFFClientProps {
@@ -1,3 +1,12 @@
1
- export { A as Adapter, e as AdapterBaseOptions, d as AdapterDeleteDetails, j as AdapterDeleteOptions, s as AdapterDeleteResult, a as AdapterInsertDetails, h as AdapterInsertOptions, q as AdapterInsertResult, f as AdapterIntrospectOptions, b as AdapterQueryDetails, g as AdapterQueryOptions, p as AdapterQueryResult, c as AdapterUpdateDetails, i as AdapterUpdateOptions, r as AdapterUpdateResult, B as BigIntString, C as Column, l as ColumnFilter, D as DataType, k as DataTypeGroup, E as Either, m as FilterGroup, F as FilterOperator, I as Introspection, N as NumericString, S as Schema, o as SortDirection, n as SortOrderItem, T as Table } from '../adapter-Bt_0JnjE.cjs';
2
- export { a as ExecuteOptions, E as Executor, Q as Query, b as QueryResult, c as applyInferredRowFilters, i as inferRowFilter } from '../index-C9ZnIXOd.cjs';
1
+ import { Q as Query, E as Either, a as QueryResult } from '../query-Q-ZKX_Vr.cjs';
2
+ export { A as Adapter, h as AdapterBaseOptions, f as AdapterDeleteDetails, n as AdapterDeleteOptions, x as AdapterDeleteResult, b as AdapterError, c as AdapterInsertDetails, l as AdapterInsertOptions, v as AdapterInsertResult, j as AdapterIntrospectOptions, o as AdapterIntrospectResult, d as AdapterQueryDetails, k as AdapterQueryOptions, u as AdapterQueryResult, e as AdapterUpdateDetails, m as AdapterUpdateOptions, w as AdapterUpdateResult, z as BigIntString, C as Column, q as ColumnFilter, D as DataType, p as DataTypeGroup, r as FilterGroup, F as FilterOperator, N as NumericString, S as Schema, t as SortDirection, s as SortOrderItem, T as Table, g as applyInferredRowFilters, y as createAdapterError, i as inferRowFilter } from '../query-Q-ZKX_Vr.cjs';
3
3
  import 'kysely';
4
+
5
+ interface Executor {
6
+ execute<Q extends Query>(query: Q, options?: ExecuteOptions): Promise<Either<Error, QueryResult<Q>>>;
7
+ }
8
+ interface ExecuteOptions {
9
+ abortSignal?: AbortSignal;
10
+ }
11
+
12
+ export { Either, type ExecuteOptions, type Executor, Query, QueryResult };