@prisma/studio-core 0.0.0-dev.202505290936 → 0.0.0-dev.202505290950

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,10 @@
1
+ import * as ___react___ from 'react';
2
+ import * as ___react_dom___ from 'react-dom';
3
+
4
+ function require(mod) {
5
+ if (mod === 'react') return ___react___;
6
+ if (mod === 'react-dom') return ___react_dom___;
7
+ throw new Error(`Unknown module ${mod}`);
8
+ }
9
+ import{A as nt,B as b,C as F,a as B,b as V,c as q,d as W,e as J,f as K,g as f,h as A,i as G,j as $,k as C,l as Y,m as g,n as H,o as X,p as Z,q as P,r as tt,s as it,t as k,u as O,v,w as et,x as st,y as rt,z as at}from"./chunk-FRW62KTF.js";import{e as p}from"./chunk-P5LRZ6C2.js";p();p();p();function m(e){let{error:t,query:i}=e,s=t;return s.query=i,[s]}p();var pt={bool:{group:"boolean"},boolean:{group:"boolean"},bytea:{group:"string"},char:{group:"string"},citext:{group:"string"},date:{group:"datetime"},interval:{group:"string"},name:{group:"string"},varchar:{group:"string"},text:{group:"string"},time:{group:"time"},timestamp:{group:"datetime"},timestamptz:{group:"datetime"},"timestamp without time zone":{group:"datetime"},"timestamp with time zone":{group:"datetime"},timetz:{group:"time"},"time without time zone":{group:"time"},"time with time zone":{group:"datetime"},uuid:{group:"string"},int2:{group:"numeric"},int4:{group:"numeric"},int8:{group:"numeric"},smallint:{group:"numeric"},integer:{group:"numeric"},bigint:{group:"numeric"},decimal:{group:"numeric"},numeric:{group:"numeric"},real:{group:"numeric"},float4:{group:"numeric"},float8:{group:"numeric"},"double precision":{group:"numeric"},json:{group:"json"},jsonb:{group:"json"}};p();p();var M=class e{#t;constructor(t){this.#t=f(t)}get expressionType(){}get isRawBuilder(){return!0}as(t){return new z(this,t)}$castTo(){return new e({...this.#t})}$notNull(){return new e(this.#t)}withPlugin(t){return new e({...this.#t,plugins:this.#t.plugins!==void 0?f([...this.#t.plugins,t]):f([t])})}toOperationNode(){return this.#e(this.#i())}compile(t){return this.#s(this.#i(t))}async execute(t){let i=this.#i(t);return i.executeQuery(this.#s(i),this.#t.queryId)}#i(t){let i=t!==void 0?t.getExecutor():et;return this.#t.plugins!==void 0?i.withPlugins(this.#t.plugins):i}#e(t){return t.transformQuery(this.#t.rawNode,this.#t.queryId)}#s(t){return t.compileQuery(this.#e(t),this.#t.queryId)}};function N(e){return new M(e)}var z=class{#t;#i;constructor(t,i){this.#t=t,this.#i=i}get expression(){return this.#t}get alias(){return this.#i}get rawBuilder(){return this.#t}toOperationNode(){return $.create(this.#t.toOperationNode(),C(this.#i)?this.#i.toOperationNode():A.create(this.#i))}};p();var d=Object.assign((e,...t)=>N({queryId:v(),rawNode:g.create(e,t?.map(ot)??[])}),{ref(e){return N({queryId:v(),rawNode:g.createWithChild(X(e))})},val(e){return N({queryId:v(),rawNode:g.createWithChild(P(e))})},value(e){return this.val(e)},table(e){return N({queryId:v(),rawNode:g.createWithChild(rt(e))})},id(...e){let t=new Array(e.length+1).fill(".");return t[0]="",t[t.length-1]="",N({queryId:v(),rawNode:g.create(t,e.map(A.create))})},lit(e){return N({queryId:v(),rawNode:g.createWithChild(Z.createImmediate(e))})},literal(e){return this.lit(e)},raw(e){return N({queryId:v(),rawNode:g.createWithSql(e)})},join(e,t=d`, `){let i=new Array(Math.max(2*e.length-1,0)),s=t.toOperationNode();for(let r=0;r<e.length;++r)i[2*r]=ot(e[r]),r!==e.length-1&&(i[2*r+1]=s);return N({queryId:v(),rawNode:g.createWithChildren(i)})}});function ot(e){return C(e)?e.toOperationNode():P(e)}p();p();var T=class{nodeStack=[];get parentNode(){return this.nodeStack[this.nodeStack.length-2]}#t=f({AliasNode:this.visitAlias.bind(this),ColumnNode:this.visitColumn.bind(this),IdentifierNode:this.visitIdentifier.bind(this),SchemableIdentifierNode:this.visitSchemableIdentifier.bind(this),RawNode:this.visitRaw.bind(this),ReferenceNode:this.visitReference.bind(this),SelectQueryNode:this.visitSelectQuery.bind(this),SelectionNode:this.visitSelection.bind(this),TableNode:this.visitTable.bind(this),FromNode:this.visitFrom.bind(this),SelectAllNode:this.visitSelectAll.bind(this),AndNode:this.visitAnd.bind(this),OrNode:this.visitOr.bind(this),ValueNode:this.visitValue.bind(this),ValueListNode:this.visitValueList.bind(this),PrimitiveValueListNode:this.visitPrimitiveValueList.bind(this),ParensNode:this.visitParens.bind(this),JoinNode:this.visitJoin.bind(this),OperatorNode:this.visitOperator.bind(this),WhereNode:this.visitWhere.bind(this),InsertQueryNode:this.visitInsertQuery.bind(this),DeleteQueryNode:this.visitDeleteQuery.bind(this),ReturningNode:this.visitReturning.bind(this),CreateTableNode:this.visitCreateTable.bind(this),AddColumnNode:this.visitAddColumn.bind(this),ColumnDefinitionNode:this.visitColumnDefinition.bind(this),DropTableNode:this.visitDropTable.bind(this),DataTypeNode:this.visitDataType.bind(this),OrderByNode:this.visitOrderBy.bind(this),OrderByItemNode:this.visitOrderByItem.bind(this),GroupByNode:this.visitGroupBy.bind(this),GroupByItemNode:this.visitGroupByItem.bind(this),UpdateQueryNode:this.visitUpdateQuery.bind(this),ColumnUpdateNode:this.visitColumnUpdate.bind(this),LimitNode:this.visitLimit.bind(this),OffsetNode:this.visitOffset.bind(this),OnConflictNode:this.visitOnConflict.bind(this),OnDuplicateKeyNode:this.visitOnDuplicateKey.bind(this),CreateIndexNode:this.visitCreateIndex.bind(this),DropIndexNode:this.visitDropIndex.bind(this),ListNode:this.visitList.bind(this),PrimaryKeyConstraintNode:this.visitPrimaryKeyConstraint.bind(this),UniqueConstraintNode:this.visitUniqueConstraint.bind(this),ReferencesNode:this.visitReferences.bind(this),CheckConstraintNode:this.visitCheckConstraint.bind(this),WithNode:this.visitWith.bind(this),CommonTableExpressionNode:this.visitCommonTableExpression.bind(this),CommonTableExpressionNameNode:this.visitCommonTableExpressionName.bind(this),HavingNode:this.visitHaving.bind(this),CreateSchemaNode:this.visitCreateSchema.bind(this),DropSchemaNode:this.visitDropSchema.bind(this),AlterTableNode:this.visitAlterTable.bind(this),DropColumnNode:this.visitDropColumn.bind(this),RenameColumnNode:this.visitRenameColumn.bind(this),AlterColumnNode:this.visitAlterColumn.bind(this),ModifyColumnNode:this.visitModifyColumn.bind(this),AddConstraintNode:this.visitAddConstraint.bind(this),DropConstraintNode:this.visitDropConstraint.bind(this),RenameConstraintNode:this.visitRenameConstraint.bind(this),ForeignKeyConstraintNode:this.visitForeignKeyConstraint.bind(this),CreateViewNode:this.visitCreateView.bind(this),RefreshMaterializedViewNode:this.visitRefreshMaterializedView.bind(this),DropViewNode:this.visitDropView.bind(this),GeneratedNode:this.visitGenerated.bind(this),DefaultValueNode:this.visitDefaultValue.bind(this),OnNode:this.visitOn.bind(this),ValuesNode:this.visitValues.bind(this),SelectModifierNode:this.visitSelectModifier.bind(this),CreateTypeNode:this.visitCreateType.bind(this),DropTypeNode:this.visitDropType.bind(this),ExplainNode:this.visitExplain.bind(this),DefaultInsertValueNode:this.visitDefaultInsertValue.bind(this),AggregateFunctionNode:this.visitAggregateFunction.bind(this),OverNode:this.visitOver.bind(this),PartitionByNode:this.visitPartitionBy.bind(this),PartitionByItemNode:this.visitPartitionByItem.bind(this),SetOperationNode:this.visitSetOperation.bind(this),BinaryOperationNode:this.visitBinaryOperation.bind(this),UnaryOperationNode:this.visitUnaryOperation.bind(this),UsingNode:this.visitUsing.bind(this),FunctionNode:this.visitFunction.bind(this),CaseNode:this.visitCase.bind(this),WhenNode:this.visitWhen.bind(this),JSONReferenceNode:this.visitJSONReference.bind(this),JSONPathNode:this.visitJSONPath.bind(this),JSONPathLegNode:this.visitJSONPathLeg.bind(this),JSONOperatorChainNode:this.visitJSONOperatorChain.bind(this),TupleNode:this.visitTuple.bind(this),MergeQueryNode:this.visitMergeQuery.bind(this),MatchedNode:this.visitMatched.bind(this),AddIndexNode:this.visitAddIndex.bind(this),CastNode:this.visitCast.bind(this),FetchNode:this.visitFetch.bind(this),TopNode:this.visitTop.bind(this),OutputNode:this.visitOutput.bind(this),OrActionNode:this.visitOrAction.bind(this),CollateNode:this.visitCollate.bind(this)});visitNode=t=>{this.nodeStack.push(t),this.#t[t.kind](t),this.nodeStack.pop()}};var _t=/'/g,S=class extends T{#t="";#i=[];get numParameters(){return this.#i.length}compileQuery(t,i){return this.#t="",this.#i=[],this.nodeStack.splice(0,this.nodeStack.length),this.visitNode(t),f({query:t,queryId:i,sql:this.getSql(),parameters:[...this.#i]})}getSql(){return this.#t}visitSelectQuery(t){let i=this.parentNode!==void 0&&!tt.is(this.parentNode)&&!it.is(this.parentNode)&&!G.is(this.parentNode)&&!at.is(this.parentNode)&&!st.is(this.parentNode);this.parentNode===void 0&&t.explain&&(this.visitNode(t.explain),this.append(" ")),i&&this.append("("),t.with&&(this.visitNode(t.with),this.append(" ")),this.append("select"),t.distinctOn&&(this.append(" "),this.compileDistinctOn(t.distinctOn)),t.frontModifiers?.length&&(this.append(" "),this.compileList(t.frontModifiers," ")),t.top&&(this.append(" "),this.visitNode(t.top)),t.selections&&(this.append(" "),this.compileList(t.selections)),t.from&&(this.append(" "),this.visitNode(t.from)),t.joins&&(this.append(" "),this.compileList(t.joins," ")),t.where&&(this.append(" "),this.visitNode(t.where)),t.groupBy&&(this.append(" "),this.visitNode(t.groupBy)),t.having&&(this.append(" "),this.visitNode(t.having)),t.setOperations&&(this.append(" "),this.compileList(t.setOperations," ")),t.orderBy&&(this.append(" "),this.visitNode(t.orderBy)),t.limit&&(this.append(" "),this.visitNode(t.limit)),t.offset&&(this.append(" "),this.visitNode(t.offset)),t.fetch&&(this.append(" "),this.visitNode(t.fetch)),t.endModifiers?.length&&(this.append(" "),this.compileList(this.sortSelectModifiers([...t.endModifiers])," ")),i&&this.append(")")}visitFrom(t){this.append("from "),this.compileList(t.froms)}visitSelection(t){this.visitNode(t.selection)}visitColumn(t){this.visitNode(t.column)}compileDistinctOn(t){this.append("distinct on ("),this.compileList(t),this.append(")")}compileList(t,i=", "){let s=t.length-1;for(let r=0;r<=s;r++)this.visitNode(t[r]),r<s&&this.append(i)}visitWhere(t){this.append("where "),this.visitNode(t.where)}visitHaving(t){this.append("having "),this.visitNode(t.having)}visitInsertQuery(t){let i=this.nodeStack.find(O.is),s=i!==t;!s&&t.explain&&(this.visitNode(t.explain),this.append(" ")),s&&!k.is(i)&&this.append("("),t.with&&(this.visitNode(t.with),this.append(" ")),this.append(t.replace?"replace":"insert"),t.ignore&&(H("`InsertQueryNode.ignore` is deprecated. Use `InsertQueryNode.orAction` instead."),this.append(" ignore")),t.orAction&&(this.append(" "),this.visitNode(t.orAction)),t.top&&(this.append(" "),this.visitNode(t.top)),t.into&&(this.append(" into "),this.visitNode(t.into)),t.columns&&(this.append(" ("),this.compileList(t.columns),this.append(")")),t.output&&(this.append(" "),this.visitNode(t.output)),t.values&&(this.append(" "),this.visitNode(t.values)),t.defaultValues&&(this.append(" "),this.append("default values")),t.onConflict&&(this.append(" "),this.visitNode(t.onConflict)),t.onDuplicateKey&&(this.append(" "),this.visitNode(t.onDuplicateKey)),t.returning&&(this.append(" "),this.visitNode(t.returning)),s&&!k.is(i)&&this.append(")"),t.endModifiers?.length&&(this.append(" "),this.compileList(t.endModifiers," "))}visitValues(t){this.append("values "),this.compileList(t.values)}visitDeleteQuery(t){let i=this.nodeStack.find(O.is)!==t;!i&&t.explain&&(this.visitNode(t.explain),this.append(" ")),i&&this.append("("),t.with&&(this.visitNode(t.with),this.append(" ")),this.append("delete "),t.top&&(this.visitNode(t.top),this.append(" ")),this.visitNode(t.from),t.output&&(this.append(" "),this.visitNode(t.output)),t.using&&(this.append(" "),this.visitNode(t.using)),t.joins&&(this.append(" "),this.compileList(t.joins," ")),t.where&&(this.append(" "),this.visitNode(t.where)),t.orderBy&&(this.append(" "),this.visitNode(t.orderBy)),t.limit&&(this.append(" "),this.visitNode(t.limit)),t.returning&&(this.append(" "),this.visitNode(t.returning)),i&&this.append(")"),t.endModifiers?.length&&(this.append(" "),this.compileList(t.endModifiers," "))}visitReturning(t){this.append("returning "),this.compileList(t.selections)}visitAlias(t){this.visitNode(t.node),this.append(" as "),this.visitNode(t.alias)}visitReference(t){t.table&&(this.visitNode(t.table),this.append(".")),this.visitNode(t.column)}visitSelectAll(t){this.append("*")}visitIdentifier(t){this.append(this.getLeftIdentifierWrapper()),this.compileUnwrappedIdentifier(t),this.append(this.getRightIdentifierWrapper())}compileUnwrappedIdentifier(t){if(!B(t.name))throw new Error("a non-string identifier was passed to compileUnwrappedIdentifier.");this.append(this.sanitizeIdentifier(t.name))}visitAnd(t){this.visitNode(t.left),this.append(" and "),this.visitNode(t.right)}visitOr(t){this.visitNode(t.left),this.append(" or "),this.visitNode(t.right)}visitValue(t){t.immediate?this.appendImmediateValue(t.value):this.appendValue(t.value)}visitValueList(t){this.append("("),this.compileList(t.values),this.append(")")}visitTuple(t){this.append("("),this.compileList(t.values),this.append(")")}visitPrimitiveValueList(t){this.append("(");let{values:i}=t;for(let s=0;s<i.length;++s)this.appendValue(i[s]),s!==i.length-1&&this.append(", ");this.append(")")}visitParens(t){this.append("("),this.visitNode(t.node),this.append(")")}visitJoin(t){this.append(kt[t.joinType]),this.append(" "),this.visitNode(t.table),t.on&&(this.append(" "),this.visitNode(t.on))}visitOn(t){this.append("on "),this.visitNode(t.on)}visitRaw(t){let{sqlFragments:i,parameters:s}=t;for(let r=0;r<i.length;++r)this.append(i[r]),s.length>r&&this.visitNode(s[r])}visitOperator(t){this.append(t.operator)}visitTable(t){this.visitNode(t.table)}visitSchemableIdentifier(t){t.schema&&(this.visitNode(t.schema),this.append(".")),this.visitNode(t.identifier)}visitCreateTable(t){this.append("create "),t.frontModifiers&&t.frontModifiers.length>0&&(this.compileList(t.frontModifiers," "),this.append(" ")),t.temporary&&this.append("temporary "),this.append("table "),t.ifNotExists&&this.append("if not exists "),this.visitNode(t.table),t.selectQuery?(this.append(" as "),this.visitNode(t.selectQuery)):(this.append(" ("),this.compileList([...t.columns,...t.constraints??[]]),this.append(")"),t.onCommit&&(this.append(" on commit "),this.append(t.onCommit)),t.endModifiers&&t.endModifiers.length>0&&(this.append(" "),this.compileList(t.endModifiers," ")))}visitColumnDefinition(t){t.ifNotExists&&this.append("if not exists "),this.visitNode(t.column),this.append(" "),this.visitNode(t.dataType),t.unsigned&&this.append(" unsigned"),t.frontModifiers&&t.frontModifiers.length>0&&(this.append(" "),this.compileList(t.frontModifiers," ")),t.generated&&(this.append(" "),this.visitNode(t.generated)),t.identity&&this.append(" identity"),t.defaultTo&&(this.append(" "),this.visitNode(t.defaultTo)),t.notNull&&this.append(" not null"),t.unique&&this.append(" unique"),t.nullsNotDistinct&&this.append(" nulls not distinct"),t.primaryKey&&this.append(" primary key"),t.autoIncrement&&(this.append(" "),this.append(this.getAutoIncrement())),t.references&&(this.append(" "),this.visitNode(t.references)),t.check&&(this.append(" "),this.visitNode(t.check)),t.endModifiers&&t.endModifiers.length>0&&(this.append(" "),this.compileList(t.endModifiers," "))}getAutoIncrement(){return"auto_increment"}visitReferences(t){this.append("references "),this.visitNode(t.table),this.append(" ("),this.compileList(t.columns),this.append(")"),t.onDelete&&(this.append(" on delete "),this.append(t.onDelete)),t.onUpdate&&(this.append(" on update "),this.append(t.onUpdate))}visitDropTable(t){this.append("drop table "),t.ifExists&&this.append("if exists "),this.visitNode(t.table),t.cascade&&this.append(" cascade")}visitDataType(t){this.append(t.dataType)}visitOrderBy(t){this.append("order by "),this.compileList(t.items)}visitOrderByItem(t){this.visitNode(t.orderBy),t.collation&&(this.append(" "),this.visitNode(t.collation)),t.direction&&(this.append(" "),this.visitNode(t.direction)),t.nulls&&(this.append(" nulls "),this.append(t.nulls))}visitGroupBy(t){this.append("group by "),this.compileList(t.items)}visitGroupByItem(t){this.visitNode(t.groupBy)}visitUpdateQuery(t){let i=this.nodeStack.find(O.is),s=i!==t;if(!s&&t.explain&&(this.visitNode(t.explain),this.append(" ")),s&&!k.is(i)&&this.append("("),t.with&&(this.visitNode(t.with),this.append(" ")),this.append("update "),t.top&&(this.visitNode(t.top),this.append(" ")),t.table&&(this.visitNode(t.table),this.append(" ")),this.append("set "),t.updates&&this.compileList(t.updates),t.output&&(this.append(" "),this.visitNode(t.output)),t.from&&(this.append(" "),this.visitNode(t.from)),t.joins){if(!t.from)throw new Error("Joins in an update query are only supported as a part of a PostgreSQL 'update set from join' query. If you want to create a MySQL 'update join set' query, see https://kysely.dev/docs/examples/update/my-sql-joins");this.append(" "),this.compileList(t.joins," ")}t.where&&(this.append(" "),this.visitNode(t.where)),t.orderBy&&(this.append(" "),this.visitNode(t.orderBy)),t.limit&&(this.append(" "),this.visitNode(t.limit)),t.returning&&(this.append(" "),this.visitNode(t.returning)),s&&!k.is(i)&&this.append(")"),t.endModifiers?.length&&(this.append(" "),this.compileList(t.endModifiers," "))}visitColumnUpdate(t){this.visitNode(t.column),this.append(" = "),this.visitNode(t.value)}visitLimit(t){this.append("limit "),this.visitNode(t.limit)}visitOffset(t){this.append("offset "),this.visitNode(t.offset)}visitOnConflict(t){this.append("on conflict"),t.columns?(this.append(" ("),this.compileList(t.columns),this.append(")")):t.constraint?(this.append(" on constraint "),this.visitNode(t.constraint)):t.indexExpression&&(this.append(" ("),this.visitNode(t.indexExpression),this.append(")")),t.indexWhere&&(this.append(" "),this.visitNode(t.indexWhere)),t.doNothing===!0?this.append(" do nothing"):t.updates&&(this.append(" do update set "),this.compileList(t.updates),t.updateWhere&&(this.append(" "),this.visitNode(t.updateWhere)))}visitOnDuplicateKey(t){this.append("on duplicate key update "),this.compileList(t.updates)}visitCreateIndex(t){this.append("create "),t.unique&&this.append("unique "),this.append("index "),t.ifNotExists&&this.append("if not exists "),this.visitNode(t.name),t.table&&(this.append(" on "),this.visitNode(t.table)),t.using&&(this.append(" using "),this.visitNode(t.using)),t.columns&&(this.append(" ("),this.compileList(t.columns),this.append(")")),t.nullsNotDistinct&&this.append(" nulls not distinct"),t.where&&(this.append(" "),this.visitNode(t.where))}visitDropIndex(t){this.append("drop index "),t.ifExists&&this.append("if exists "),this.visitNode(t.name),t.table&&(this.append(" on "),this.visitNode(t.table)),t.cascade&&this.append(" cascade")}visitCreateSchema(t){this.append("create schema "),t.ifNotExists&&this.append("if not exists "),this.visitNode(t.schema)}visitDropSchema(t){this.append("drop schema "),t.ifExists&&this.append("if exists "),this.visitNode(t.schema),t.cascade&&this.append(" cascade")}visitPrimaryKeyConstraint(t){t.name&&(this.append("constraint "),this.visitNode(t.name),this.append(" ")),this.append("primary key ("),this.compileList(t.columns),this.append(")"),this.buildDeferrable(t)}buildDeferrable(t){t.deferrable!==void 0&&(t.deferrable?this.append(" deferrable"):this.append(" not deferrable")),t.initiallyDeferred!==void 0&&(t.initiallyDeferred?this.append(" initially deferred"):this.append(" initially immediate"))}visitUniqueConstraint(t){t.name&&(this.append("constraint "),this.visitNode(t.name),this.append(" ")),this.append("unique"),t.nullsNotDistinct&&this.append(" nulls not distinct"),this.append(" ("),this.compileList(t.columns),this.append(")"),this.buildDeferrable(t)}visitCheckConstraint(t){t.name&&(this.append("constraint "),this.visitNode(t.name),this.append(" ")),this.append("check ("),this.visitNode(t.expression),this.append(")")}visitForeignKeyConstraint(t){t.name&&(this.append("constraint "),this.visitNode(t.name),this.append(" ")),this.append("foreign key ("),this.compileList(t.columns),this.append(") "),this.visitNode(t.references),t.onDelete&&(this.append(" on delete "),this.append(t.onDelete)),t.onUpdate&&(this.append(" on update "),this.append(t.onUpdate)),this.buildDeferrable(t)}visitList(t){this.compileList(t.items)}visitWith(t){this.append("with "),t.recursive&&this.append("recursive "),this.compileList(t.expressions)}visitCommonTableExpression(t){this.visitNode(t.name),this.append(" as "),q(t.materialized)&&(t.materialized||this.append("not "),this.append("materialized ")),this.visitNode(t.expression)}visitCommonTableExpressionName(t){this.visitNode(t.table),t.columns&&(this.append("("),this.compileList(t.columns),this.append(")"))}visitAlterTable(t){this.append("alter table "),this.visitNode(t.table),this.append(" "),t.renameTo&&(this.append("rename to "),this.visitNode(t.renameTo)),t.setSchema&&(this.append("set schema "),this.visitNode(t.setSchema)),t.addConstraint&&this.visitNode(t.addConstraint),t.dropConstraint&&this.visitNode(t.dropConstraint),t.renameConstraint&&this.visitNode(t.renameConstraint),t.columnAlterations&&this.compileColumnAlterations(t.columnAlterations),t.addIndex&&this.visitNode(t.addIndex),t.dropIndex&&this.visitNode(t.dropIndex)}visitAddColumn(t){this.append("add column "),this.visitNode(t.column)}visitRenameColumn(t){this.append("rename column "),this.visitNode(t.column),this.append(" to "),this.visitNode(t.renameTo)}visitDropColumn(t){this.append("drop column "),this.visitNode(t.column)}visitAlterColumn(t){this.append("alter column "),this.visitNode(t.column),this.append(" "),t.dataType&&(this.announcesNewColumnDataType()&&this.append("type "),this.visitNode(t.dataType),t.dataTypeExpression&&(this.append("using "),this.visitNode(t.dataTypeExpression))),t.setDefault&&(this.append("set default "),this.visitNode(t.setDefault)),t.dropDefault&&this.append("drop default"),t.setNotNull&&this.append("set not null"),t.dropNotNull&&this.append("drop not null")}visitModifyColumn(t){this.append("modify column "),this.visitNode(t.column)}visitAddConstraint(t){this.append("add "),this.visitNode(t.constraint)}visitDropConstraint(t){this.append("drop constraint "),t.ifExists&&this.append("if exists "),this.visitNode(t.constraintName),t.modifier==="cascade"?this.append(" cascade"):t.modifier==="restrict"&&this.append(" restrict")}visitRenameConstraint(t){this.append("rename constraint "),this.visitNode(t.oldName),this.append(" to "),this.visitNode(t.newName)}visitSetOperation(t){this.append(t.operator),this.append(" "),t.all&&this.append("all "),this.visitNode(t.expression)}visitCreateView(t){this.append("create "),t.orReplace&&this.append("or replace "),t.materialized&&this.append("materialized "),t.temporary&&this.append("temporary "),this.append("view "),t.ifNotExists&&this.append("if not exists "),this.visitNode(t.name),this.append(" "),t.columns&&(this.append("("),this.compileList(t.columns),this.append(") ")),t.as&&(this.append("as "),this.visitNode(t.as))}visitRefreshMaterializedView(t){this.append("refresh materialized view "),t.concurrently&&this.append("concurrently "),this.visitNode(t.name),t.withNoData?this.append(" with no data"):this.append(" with data")}visitDropView(t){this.append("drop "),t.materialized&&this.append("materialized "),this.append("view "),t.ifExists&&this.append("if exists "),this.visitNode(t.name),t.cascade&&this.append(" cascade")}visitGenerated(t){this.append("generated "),t.always&&this.append("always "),t.byDefault&&this.append("by default "),this.append("as "),t.identity&&this.append("identity"),t.expression&&(this.append("("),this.visitNode(t.expression),this.append(")")),t.stored&&this.append(" stored")}visitDefaultValue(t){this.append("default "),this.visitNode(t.defaultValue)}visitSelectModifier(t){t.rawModifier?this.visitNode(t.rawModifier):this.append(wt[t.modifier]),t.of&&(this.append(" of "),this.compileList(t.of,", "))}visitCreateType(t){this.append("create type "),this.visitNode(t.name),t.enum&&(this.append(" as enum "),this.visitNode(t.enum))}visitDropType(t){this.append("drop type "),t.ifExists&&this.append("if exists "),this.visitNode(t.name)}visitExplain(t){this.append("explain"),(t.options||t.format)&&(this.append(" "),this.append(this.getLeftExplainOptionsWrapper()),t.options&&(this.visitNode(t.options),t.format&&this.append(this.getExplainOptionsDelimiter())),t.format&&(this.append("format"),this.append(this.getExplainOptionAssignment()),this.append(t.format)),this.append(this.getRightExplainOptionsWrapper()))}visitDefaultInsertValue(t){this.append("default")}visitAggregateFunction(t){this.append(t.func),this.append("("),t.distinct&&this.append("distinct "),this.compileList(t.aggregated),t.orderBy&&(this.append(" "),this.visitNode(t.orderBy)),this.append(")"),t.withinGroup&&(this.append(" within group ("),this.visitNode(t.withinGroup),this.append(")")),t.filter&&(this.append(" filter("),this.visitNode(t.filter),this.append(")")),t.over&&(this.append(" "),this.visitNode(t.over))}visitOver(t){this.append("over("),t.partitionBy&&(this.visitNode(t.partitionBy),t.orderBy&&this.append(" ")),t.orderBy&&this.visitNode(t.orderBy),this.append(")")}visitPartitionBy(t){this.append("partition by "),this.compileList(t.items)}visitPartitionByItem(t){this.visitNode(t.partitionBy)}visitBinaryOperation(t){this.visitNode(t.leftOperand),this.append(" "),this.visitNode(t.operator),this.append(" "),this.visitNode(t.rightOperand)}visitUnaryOperation(t){this.visitNode(t.operator),this.isMinusOperator(t.operator)||this.append(" "),this.visitNode(t.operand)}isMinusOperator(t){return Y.is(t)&&t.operator==="-"}visitUsing(t){this.append("using "),this.compileList(t.tables)}visitFunction(t){this.append(t.func),this.append("("),this.compileList(t.arguments),this.append(")")}visitCase(t){this.append("case"),t.value&&(this.append(" "),this.visitNode(t.value)),t.when&&(this.append(" "),this.compileList(t.when," ")),t.else&&(this.append(" else "),this.visitNode(t.else)),this.append(" end"),t.isStatement&&this.append(" case")}visitWhen(t){this.append("when "),this.visitNode(t.condition),t.result&&(this.append(" then "),this.visitNode(t.result))}visitJSONReference(t){this.visitNode(t.reference),this.visitNode(t.traversal)}visitJSONPath(t){t.inOperator&&this.visitNode(t.inOperator),this.append("'$");for(let i of t.pathLegs)this.visitNode(i);this.append("'")}visitJSONPathLeg(t){let i=t.type==="ArrayLocation";this.append(i?"[":"."),this.append(String(t.value)),i&&this.append("]")}visitJSONOperatorChain(t){for(let i=0,s=t.values.length;i<s;i++)i===s-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(),s=this.getRightIdentifierWrapper(),r="";for(let a of t)r+=a,a===i?r+=i:a===s&&(r+=s);return r}sanitizeStringLiteral(t){return t.replace(_t,"''")}addParameter(t){this.#i.push(t)}appendImmediateValue(t){if(B(t))this.appendStringLiteral(t);else if(V(t)||q(t))this.append(t.toString());else if(W(t))this.append("null");else if(J(t))this.appendImmediateValue(t.toISOString());else if(K(t))this.appendImmediateValue(t.toString());else throw new Error(`invalid immediate value ${t}`)}appendStringLiteral(t){this.append("'"),this.append(this.sanitizeStringLiteral(t)),this.append("'")}sortSelectModifiers(t){return t.sort((i,s)=>i.modifier&&s.modifier?lt[i.modifier]-lt[s.modifier]:1),f(t)}compileColumnAlterations(t){this.compileList(t)}announcesNewColumnDataType(){return!0}},wt=f({ForKeyShare:"for key share",ForNoKeyUpdate:"for no key update",ForUpdate:"for update",ForShare:"for share",NoWait:"nowait",SkipLocked:"skip locked",Distinct:"distinct"}),lt=f({ForKeyShare:1,ForNoKeyUpdate:1,ForUpdate:1,ForShare:1,NoWait:2,SkipLocked:2,Distinct:0}),kt=f({InnerJoin:"inner join",LeftJoin:"left join",RightJoin:"right join",FullJoin:"full join",CrossJoin:"cross join",LateralInnerJoin:"inner join lateral",LateralLeftJoin:"left join lateral",LateralCrossJoin:"cross join lateral",OuterApply:"outer apply",CrossApply:"cross apply",Using:"using"});p();var D=class{get supportsCreateIfNotExists(){return!0}get supportsTransactionalDdl(){return!1}get supportsReturning(){return!1}get supportsOutput(){return!1}};p();var At=/"/g,I=class extends S{sanitizeIdentifier(t){return t.replace(At,'""')}};p();var Ct=BigInt("3853314791062309107"),R=class extends D{get supportsTransactionalDdl(){return!0}get supportsReturning(){return!0}async acquireMigrationLock(t,i){await d`select pg_advisory_xact_lock(${d.lit(Ct)})`.execute(t)}async releaseMigrationLock(t,i){}};p();function x(e){return nt({...e,Adapter:R,QueryCompiler:I})}function dt(e,t){let{table:i,rows:s}=e,{name:r,schema:a,columns:n}=i,o=x(t),h=Object.keys(n),l={[h[0]]:d`default`};return b(o.withSchema(a).insertInto(r).values(s.map(y=>Object.keys(y).length===0?l:y)).returning(h).returning(y=>y.cast("ctid","text").as("ctid")))}function ht(e,t){let{pageIndex:i,pageSize:s,sortOrder:r,table:{name:a,schema:n,columns:o},filter:h={kind:"FilterGroup",after:"and",filters:[]}}=e,l=x(t),y=Object.keys(o),E=l.withSchema(n).selectFrom(a).select(u=>u.cast(u.fn.coalesce(u.fn.countAll(),d.lit(0)),"text").as("oid"));return b(l.with("count",()=>E).withSchema(n).selectFrom([a,"count"]).select(d.ref("count.oid").$castTo().as("oid")).select(u=>u.cast("ctid","text").as("ctid")).select(y).$call(u=>r.reduce((_,w)=>_.orderBy(w.column,w.direction),u)).where(ut(h.filters,o)).limit(s).offset(d.lit(BigInt(i)*BigInt(s))))}function Ot(e,t){return e.kind==="ColumnFilter"?i=>{let s=t[e.column],{value:r,operator:a,column:n}=e;if(s?.datatype.group==="enum"&&r!=null&&a!=="is"&&a!=="is not"){let o=`"${s.datatype.schema}"."${s.datatype.name}"`;return i(i.ref(n),a,i.cast(d.lit(r),d.raw(o)))}return i(i.ref(n),a,r)}:ut(e.filters,t)}function ut(e,t){if(e.length===0)return r=>r.lit(!0);let i=[],s=[];for(let r=0;r<e.length;r++)s.push(Ot(e[r],t)),(r===e.length-1||e[r].after==="or")&&(i.push(s),s=[]);return r=>{let a=i.map(n=>r.and(n.map(o=>o(r))));return r.or(a)}}function Bi(){return[{created_at:new Date("2025-01-26T21:56:12.345Z"),ctid:"(0,1)",deleted_at:null,id:1,name:"John Doe",oid:"2",role:"admin",name_role:"Jonn Doe - admin"},{created_at:new Date("2025-01-26T20:56:12.345Z"),ctid:"(0,2)",deleted_at:null,id:2,name:"Jane Doe",oid:"2",role:"poweruser",name_role:"Jane Doe - poweruser"}]}function ct(e,t){let{changes:i,row:s,table:{columns:r,name:a,schema:n}}=e,o=x(t),h=Object.keys(r);return b(o.withSchema(n).updateTable(a).set(i).$call(F([s],r)).returning(h).returning(l=>[l.cast("ctid","text").as("ctid"),l.cast(l.fn("floor",[l(l.fn("extract",[d`epoch from now()`]),"*",1e6)]),"text").as("__ps_updated_at__")]))}function mt(e,t){let{rows:i,table:{columns:s,name:r,schema:a}}=e,n=x(t);return b(n.withSchema(a).deleteFrom(r).$call(F(i,s)))}p();p();function ft(e){return d`(select coalesce(json_agg(agg), '[]') from ${e} as agg)`}var Tt="r",St="v",Dt=[Tt,St];function yt(e){return b(x(e).selectFrom("pg_catalog.pg_class as cls").innerJoin("pg_catalog.pg_namespace as ns","cls.relnamespace","ns.oid").$call(It).where("cls.relkind","in",Dt).select(t=>["ns.nspname as schema","cls.relname as name",ft(t.selectFrom("pg_catalog.pg_attribute as att").innerJoin("pg_catalog.pg_type as typ","typ.oid","att.atttypid").innerJoin("pg_catalog.pg_namespace as tns","tns.oid","typ.typnamespace").leftJoin("pg_catalog.pg_constraint as pk_con",i=>i.on("pk_con.contype","=","p").onRef("pk_con.conrelid","=","cls.oid").on(s=>s("att.attnum","=",s.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(s=>s("att.attnum","=",s.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(s=>s("fk_att.attnum","=",s.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(s=>s.fn.jsonAgg(s.ref("enm.enumlabel")).as("o")),d`'[]'`).as("options")])).as("columns")]))}function gt(){return[{schema:"zoo",name:"animals",columns:[{name:"id",datatype:"int4",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"text",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null}]},{schema:"public",name:"users",columns:[{name:"id",datatype:"int4",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"created_at",datatype:"timestamp",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"deleted_at",datatype:"timestamp",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"role",datatype:"varchar",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"varchar",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name_role",datatype:"text",datatype_schema:"pg_catalog",pk:!1,computed:!0,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null}]}]}function vt(){let e=x();return b(e.selectNoFrom(e.fn("current_setting",[d.lit("timezone")]).as("timezone")))}function Nt(){return[{timezone:"UTC"}]}function It(e){return e.where("ns.nspname","!~","^pg_").where("ns.nspname","!=","information_schema")}function Xi(e){let{executor:t,...i}=e;return{defaultSchema:"public",async introspect(s){try{let r=yt(i),a=vt(),[[n,o],[h,l]]=await Promise.all([t.execute(r,s),t.execute(a,s)]);if(n)return m({error:n,query:r});if(h)return m({error:h,query:a});let y=l[0]?.timezone;return y?[null,bt({tables:o,timezone:y,query:r})]:m({error:new Error("Timezone not found"),query:a})}catch(r){return m({error:r})}},async query(s,r){try{let a=ht(s,i),[n,o]=await t.execute(a,r);return n?m({error:n,query:a}):[null,{filteredRowCount:o[0]?.oid||"0",rows:o,query:a}]}catch(a){return m({error:a})}},async insert(s,r){try{let a=dt(s,i),[n,o]=await t.execute(a,r);return n?m({error:n,query:a}):[null,{rows:o,query:a}]}catch(a){return m({error:a})}},async update(s,r){try{let a=ct(s,i),[n,o]=await t.execute(a,r);if(n)return m({error:n,query:a});let[h]=o;return h?[null,{row:h,query:a}]:m({error:new Error("Update failed"),query:a})}catch(a){return m({error:a})}},async delete(s,r){try{let a=mt(s,i),[n]=await t.execute(a,r);return n?m({error:n,query:a}):[null,{...s,query:a}]}catch(a){return m({error:a})}}}}function bt(e){let{tables:t,timezone:i,query:s}=e;return t.reduce((r,a)=>{let{schemas:n}=r,{columns:o,name:h,schema:l}=a,y=o.reduce((E,u)=>{let{datatype:_,datatype_schema:w,name:U,options:j,nullable:xt}=u,L=_.startsWith("_"),Q=L?_.slice(1):_;return{...E,[U]:{datatype:{...pt[Q]||{group:j.length>0?"enum":"raw"},isArray:L,isNative:w==="pg_catalog",name:L?`${Q}[]`:Q,options:j,schema:w},isComputed:u.computed,isInPrimaryKey:u.pk,name:U,nullable:xt,schema:l,table:h,fkSchema:u.foreign_key_schema,fkTable:u.foreign_key_table,fkColumn:u.foreign_key_column}}},{});return n[l]===void 0&&(n[l]={name:l,tables:{}}),n[l].tables[h]={columns:y,name:h,schema:l},r},{schemas:{public:{tables:{},name:"public"}},timezone:i,filterOperators:Rt,query:s})}var Rt=["=","!=",">",">=","<","<=","is","is not","like","not like","ilike","not ilike"];function Zi(){let e=gt(),[{timezone:t}]=Nt();return bt({tables:e,timezone:t,query:{parameters:[],sql:"<mocked>"}})}export{dt as a,ht as b,Bi as c,ct as d,mt as e,yt as f,gt as g,vt as h,Nt as i,Xi as j,Zi as k};
10
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2luZGV4LnRzIiwgIi4uL2RhdGEvcG9zdGdyZXMtY29yZS9hZGFwdGVyLnRzIiwgIi4uL2RhdGEvYWRhcHRlci50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvZGF0YXR5cGUudHMiLCAiLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2RtbC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3Jhdy1idWlsZGVyL3Jhdy1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcmF3LWJ1aWxkZXIvc3FsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktY29tcGlsZXIvZGVmYXVsdC1xdWVyeS1jb21waWxlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXZpc2l0b3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9kaWFsZWN0L2RpYWxlY3QtYWRhcHRlci1iYXNlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vZGlhbGVjdC9wb3N0Z3Jlcy9wb3N0Z3Jlcy1xdWVyeS1jb21waWxlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2RpYWxlY3QvcG9zdGdyZXMvcG9zdGdyZXMtYWRhcHRlci5qcyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvYnVpbGRlci50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvaW50cm9zcGVjdGlvbi50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2hlbHBlcnMvcG9zdGdyZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RtbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRGVsZXRlUmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJFcnJvcixcbiAgdHlwZSBBZGFwdGVySW5zZXJ0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJRdWVyeVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyVXBkYXRlUmVzdWx0LFxuICB0eXBlIENvbHVtbixcbiAgY3JlYXRlQWRhcHRlckVycm9yLFxuICB0eXBlIEZpbHRlck9wZXJhdG9yLFxuICB0eXBlIFRhYmxlLFxufSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRvciB9IGZyb20gXCIuLi9leGVjdXRvclwiO1xuaW1wb3J0IHR5cGUgeyBRdWVyeSwgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IFBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSB9IGZyb20gXCIuL2RhdGF0eXBlXCI7XG5pbXBvcnQgeyBnZXREZWxldGVRdWVyeSwgZ2V0SW5zZXJ0UXVlcnksIGdldFNlbGVjdFF1ZXJ5LCBnZXRVcGRhdGVRdWVyeSB9IGZyb20gXCIuL2RtbFwiO1xuaW1wb3J0IHsgZ2V0VGFibGVzUXVlcnksIGdldFRpbWV6b25lUXVlcnksIG1vY2tUYWJsZXNRdWVyeSwgbW9ja1RpbWV6b25lUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zdGdyZXNBZGFwdGVyUmVxdWlyZW1lbnRzIHtcbiAgZXhlY3V0b3I6IEV4ZWN1dG9yO1xuICBub1BhcmFtZXRlcnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9zdGdyZXNBZGFwdGVyKHJlcXVpcmVtZW50czogUG9zdGdyZXNBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLm90aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0U2NoZW1hOiBcInB1YmxpY1wiLFxuICAgIGFzeW5jIGludHJvc3BlY3Qob3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0YWJsZXNRdWVyeSA9IGdldFRhYmxlc1F1ZXJ5KG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgdGltZXpvbmVRdWVyeSA9IGdldFRpbWV6b25lUXVlcnkoKTtcblxuICAgICAgICBjb25zdCBbW3RhYmxlc0Vycm9yLCB0YWJsZXNdLCBbdGltZXpvbmVFcnJvciwgdGltZXpvbmVzXV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0YWJsZXNRdWVyeSwgb3B0aW9ucyksXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0aW1lem9uZVF1ZXJ5LCBvcHRpb25zKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHRhYmxlc0Vycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB0YWJsZXNFcnJvciwgcXVlcnk6IHRhYmxlc1F1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWV6b25lRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRpbWV6b25lRXJyb3IsIHF1ZXJ5OiB0aW1lem9uZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZXpvbmUgPSB0aW1lem9uZXNbMF0/LnRpbWV6b25lO1xuXG4gICAgICAgIGlmICghdGltZXpvbmUpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IG5ldyBFcnJvcihcIlRpbWV6b25lIG5vdCBmb3VuZFwiKSwgcXVlcnk6IHRpbWV6b25lUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyB0YWJsZXMsIHRpbWV6b25lLCBxdWVyeTogdGFibGVzUXVlcnkgfSldO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHF1ZXJ5KGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJRdWVyeVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0U2VsZWN0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyBmaWx0ZXJlZFJvd0NvdW50OiByZXN1bHRzWzBdPy5vaWQgfHwgXCIwXCIsIHJvd3M6IHJlc3VsdHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGluc2VydChkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW5zZXJ0UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRJbnNlcnRRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IFtlcnJvciwgcm93c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3MsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlKGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJVcGRhdGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFVwZGF0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcm93XSA9IHJlc3VsdHM7XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjdXN0b20gZXJyb3I/XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJVcGRhdGUgZmFpbGVkXCIpLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3csIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGRlbGV0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyRGVsZXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXREZWxldGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IFtlcnJvcl0gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IC4uLmRldGFpbHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnRyb3NwZWN0aW9uKGFyZ3M6IHsgdGFibGVzOiBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+OyB0aW1lem9uZTogc3RyaW5nOyBxdWVyeTogUXVlcnkgfSkge1xuICBjb25zdCB7IHRhYmxlcywgdGltZXpvbmUsIHF1ZXJ5IH0gPSBhcmdzO1xuXG4gIHJldHVybiB0YWJsZXMucmVkdWNlKFxuICAgIChyZXN1bHQsIHJvdykgPT4ge1xuICAgICAgY29uc3QgeyBzY2hlbWFzIH0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0gPSByb3c7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zLnJlZHVjZShcbiAgICAgICAgKGNvbHVtbnMsIGNvbHVtbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZGF0YXR5cGUsIGRhdGF0eXBlX3NjaGVtYSwgbmFtZTogY29sdW1uTmFtZSwgb3B0aW9ucywgbnVsbGFibGUgfSA9IGNvbHVtbjtcblxuICAgICAgICAgIGNvbnN0IGlzQXJyYXkgPSBkYXRhdHlwZS5zdGFydHNXaXRoKFwiX1wiKTtcbiAgICAgICAgICBjb25zdCBzdHJpcHBlZERhdGFUeXBlID0gaXNBcnJheSA/IGRhdGF0eXBlLnNsaWNlKDEpIDogZGF0YXR5cGU7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29sdW1ucyxcbiAgICAgICAgICAgIFtjb2x1bW5OYW1lXToge1xuICAgICAgICAgICAgICBkYXRhdHlwZToge1xuICAgICAgICAgICAgICAgIC4uLihQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEFbc3RyaXBwZWREYXRhVHlwZV0gfHwge1xuICAgICAgICAgICAgICAgICAgZ3JvdXA6IG9wdGlvbnMubGVuZ3RoID4gMCA/IFwiZW51bVwiIDogXCJyYXdcIixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBpc0FycmF5LFxuICAgICAgICAgICAgICAgIGlzTmF0aXZlOiBkYXRhdHlwZV9zY2hlbWEgPT09IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgICAgICAgIG5hbWU6IGlzQXJyYXkgPyBgJHtzdHJpcHBlZERhdGFUeXBlfVtdYCA6IHN0cmlwcGVkRGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IGRhdGF0eXBlX3NjaGVtYSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaXNDb21wdXRlZDogY29sdW1uLmNvbXB1dGVkLFxuICAgICAgICAgICAgICBpc0luUHJpbWFyeUtleTogY29sdW1uLnBrLFxuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICBudWxsYWJsZSxcbiAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICBma1NjaGVtYTogY29sdW1uLmZvcmVpZ25fa2V5X3NjaGVtYSxcbiAgICAgICAgICAgICAgZmtUYWJsZTogY29sdW1uLmZvcmVpZ25fa2V5X3RhYmxlLFxuICAgICAgICAgICAgICBma0NvbHVtbjogY29sdW1uLmZvcmVpZ25fa2V5X2NvbHVtbixcbiAgICAgICAgICAgIH0gYXMgY29uc3Qgc2F0aXNmaWVzIENvbHVtbixcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBUYWJsZVtcImNvbHVtbnNcIl0sXG4gICAgICApO1xuXG4gICAgICBpZiAoc2NoZW1hc1tzY2hlbWFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2NoZW1hc1tzY2hlbWFdID0ge1xuICAgICAgICAgIG5hbWU6IHNjaGVtYSxcbiAgICAgICAgICB0YWJsZXM6IHt9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBzY2hlbWFzW3NjaGVtYV0udGFibGVzW3RhYmxlTmFtZV0gPSB7XG4gICAgICAgIGNvbHVtbnM6IGNvbHVtbnNSZWNvcmQsXG4gICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjaGVtYXM6IHsgcHVibGljOiB7IHRhYmxlczoge30sIG5hbWU6IFwicHVibGljXCIgfSB9LFxuICAgICAgdGltZXpvbmUsXG4gICAgICBmaWx0ZXJPcGVyYXRvcnMsXG4gICAgICBxdWVyeSxcbiAgICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCBhcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCxcbiAgKTtcbn1cblxuY29uc3QgZmlsdGVyT3BlcmF0b3JzID0gW1xuICBcIj1cIixcbiAgXCIhPVwiLFxuICBcIj5cIixcbiAgXCI+PVwiLFxuICBcIjxcIixcbiAgXCI8PVwiLFxuICBcImlzXCIsXG4gIFwiaXMgbm90XCIsXG4gIFwibGlrZVwiLFxuICBcIm5vdCBsaWtlXCIsXG4gIFwiaWxpa2VcIixcbiAgXCJub3QgaWxpa2VcIixcbl0gc2F0aXNmaWVzIEZpbHRlck9wZXJhdG9yW107XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrSW50cm9zcGVjdCgpIHtcbiAgY29uc3QgdGFibGVzID0gbW9ja1RhYmxlc1F1ZXJ5KCk7XG4gIGNvbnN0IFt7IHRpbWV6b25lIH1dID0gbW9ja1RpbWV6b25lUXVlcnkoKTtcbiAgY29uc3QgcXVlcnkgPSB7IHBhcmFtZXRlcnM6IFtdLCBzcWw6IFwiPG1vY2tlZD5cIiB9IGFzIFF1ZXJ5O1xuXG4gIHJldHVybiBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgdGFibGVzLCB0aW1lem9uZSwgcXVlcnkgfSkgYXMge1xuICAgIC8vIGJlc3QgZWZmb3J0LCBubyBuZWVkIGdvIG92ZXJib2FyZC5cbiAgICBzY2hlbWFzOiB7XG4gICAgICBbSyBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcInNjaGVtYVwiXV06IHtcbiAgICAgICAgbmFtZTogSztcbiAgICAgICAgdGFibGVzOiB7XG4gICAgICAgICAgW1QgaW4gKHR5cGVvZiB0YWJsZXMpW251bWJlcl1bXCJuYW1lXCJdXTogVGFibGU7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gICAgdGltZXpvbmU6IHR5cGVvZiB0aW1lem9uZTtcbiAgICBmaWx0ZXJPcGVyYXRvcnM6IEZpbHRlck9wZXJhdG9yW107XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdDtcbn1cbiIsICJpbXBvcnQgeyBRdWVyeSB9IGZyb20gXCIuL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEJpZ0ludFN0cmluZywgRWl0aGVyLCBOdW1lcmljU3RyaW5nIH0gZnJvbSBcIi4vdHlwZS11dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXIge1xuICAvKipcbiAgICogVGhlIHNjaGVtYSBzdHVkaW8gd2lsbCBjaG9vc2UgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogZS5nLiBgcHVibGljYCBmb3IgUG9zdGdyZVNRTFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFNjaGVtYT86IHN0cmluZztcblxuICAvKipcbiAgICogSW50cm9zcGVjdHMgdGhlIGRhdGFiYXNlIGFuZCByZXR1cm5zIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNjaGVtYXMsIHRhYmxlcywgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBpbnRyb3NwZWN0aW9uIHJlcXVlc3QuXG4gICAqL1xuICBpbnRyb3NwZWN0KG9wdGlvbnM6IEFkYXB0ZXJJbnRyb3NwZWN0T3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ+PjtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBzdHJ1Y3R1cmVkIHF1ZXJ5IGFnYWluc3QgdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgcXVlcnkoZGV0YWlsczogQWRhcHRlclF1ZXJ5RGV0YWlscywgb3B0aW9uczogQWRhcHRlclF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclF1ZXJ5UmVzdWx0Pj47XG5cbiAgLyoqXG4gICAqIEluc2VydHMgYSBzaW5nbGUgcm93IGludG8gdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgaW5zZXJ0KFxuICAgIGRldGFpbHM6IEFkYXB0ZXJJbnNlcnREZXRhaWxzLFxuICAgIG9wdGlvbnM6IEFkYXB0ZXJJbnNlcnRPcHRpb25zLFxuICApOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJJbnNlcnRSZXN1bHQ+PjtcblxuICAvKipcbiAgICogVXBkYXRlcyBhIGdpdmVuIHJvdyBpbiB0aGUgZGF0YWJhc2Ugd2l0aCBnaXZlbiBjaGFuZ2VzLlxuICAgKi9cbiAgdXBkYXRlKFxuICAgIGRldGFpbHM6IEFkYXB0ZXJVcGRhdGVEZXRhaWxzLFxuICAgIG9wdGlvbnM6IEFkYXB0ZXJVcGRhdGVPcHRpb25zLFxuICApOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJVcGRhdGVSZXN1bHQ+PjtcblxuICAvKipcbiAgICogRGVsZXRlcyBnaXZlbiByb3dzIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgZGVsZXRlKFxuICAgIGRldGFpbHM6IEFkYXB0ZXJEZWxldGVEZXRhaWxzLFxuICAgIG9wdGlvbnM6IEFkYXB0ZXJEZWxldGVPcHRpb25zLFxuICApOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJEZWxldGVSZXN1bHQ+Pjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyQmFzZU9wdGlvbnMge31cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVySW50cm9zcGVjdE9wdGlvbnMgZXh0ZW5kcyBBZGFwdGVyQmFzZU9wdGlvbnMge31cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyUXVlcnlPcHRpb25zIGV4dGVuZHMgQWRhcHRlckJhc2VPcHRpb25zIHtcbiAgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJJbnNlcnRPcHRpb25zIGV4dGVuZHMgQWRhcHRlckJhc2VPcHRpb25zIHt9XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclVwZGF0ZU9wdGlvbnMgZXh0ZW5kcyBBZGFwdGVyQmFzZU9wdGlvbnMge31cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyRGVsZXRlT3B0aW9ucyBleHRlbmRzIEFkYXB0ZXJCYXNlT3B0aW9ucyB7fVxuXG50eXBlIFNjaGVtYU5hbWUgPSBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckludHJvc3BlY3RSZXN1bHQge1xuICBzY2hlbWFzOiBSZWNvcmQ8U2NoZW1hTmFtZSwgU2NoZW1hPjtcbiAgdGltZXpvbmU6IHN0cmluZztcbiAgZmlsdGVyT3BlcmF0b3JzOiBGaWx0ZXJPcGVyYXRvcltdO1xuICBxdWVyeTogUXVlcnk7XG59XG5cbnR5cGUgVGFibGVOYW1lID0gc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGFibGVzOiBSZWNvcmQ8VGFibGVOYW1lLCBUYWJsZT47XG59XG5cbnR5cGUgQ29sdW1uTmFtZSA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZSB7XG4gIGNvbHVtbnM6IFJlY29yZDxDb2x1bW5OYW1lLCBDb2x1bW4+O1xuICBuYW1lOiBUYWJsZU5hbWU7XG4gIHNjaGVtYTogU2NoZW1hTmFtZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW4ge1xuICBkYXRhdHlwZTogRGF0YVR5cGU7XG4gIGlzQ29tcHV0ZWQ6IGJvb2xlYW47XG4gIGlzSW5QcmltYXJ5S2V5OiBib29sZWFuO1xuICBuYW1lOiBDb2x1bW5OYW1lO1xuICBudWxsYWJsZTogYm9vbGVhbjtcbiAgc2NoZW1hOiBTY2hlbWFOYW1lO1xuICB0YWJsZTogVGFibGVOYW1lO1xuICBma1NjaGVtYTogU2NoZW1hTmFtZSB8IG51bGw7XG4gIGZrQ29sdW1uOiBDb2x1bW5OYW1lIHwgbnVsbDtcbiAgZmtUYWJsZTogVGFibGVOYW1lIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhVHlwZSB7XG4gIC8qKlxuICAgKiBBIHNpbXBsaWZpY2F0aW9uL25vcm1hbGl6YXRpb24gZm9yIFVJIHVzYWdlLlxuICAgKlxuICAgKiBlLmcuIHZhcmNoYXIgYW5kIGNoYXIgYXJlIHN0cmluZ3MuXG4gICAqL1xuICBncm91cDogRGF0YVR5cGVHcm91cDtcblxuICAvKipcbiAgICogSXMgdGhpcyBhIG5hdGl2ZSBhcnJheSB0eXBlP1xuICAgKi9cbiAgaXNBcnJheTogYm9vbGVhbjtcblxuICAvKipcbiAgICogSXMgYSBuYXRpdmUgZGF0YWJhc2UgZGF0YXR5cGUgb3IgYSB1c2VyLWRlZmluZWQgZGF0YXR5cGU/XG4gICAqXG4gICAqIGUuZy4gUG9zdGdyZVNRTCBlbnVtcyBhcmUgdXNlci1kZWZpbmVkIGRhdGF0eXBlcywgYnV0IGBpbnQ0YCBpcyBhIG5hdGl2ZSBkYXRhdHlwZS5cbiAgICovXG4gIGlzTmF0aXZlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaWxsIGJlIGRpc3BsYXllZCBhcy1pcy5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRW51bSB2YWx1ZXMgZm9yIGVudW0gdHlwZXMuXG4gICAqL1xuICBvcHRpb25zOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHNjaGVtYSB0aGUgZGF0YXR5cGUgYmVsb25ncyB0by5cbiAgICovXG4gIHNjaGVtYTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBEYXRhVHlwZUdyb3VwID0gXCJzdHJpbmdcIiB8IFwiZGF0ZXRpbWVcIiB8IFwiYm9vbGVhblwiIHwgXCJlbnVtXCIgfCBcInRpbWVcIiB8IFwicmF3XCIgfCBcIm51bWVyaWNcIiB8IFwianNvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJRdWVyeURldGFpbHMge1xuICAvKipcbiAgICogWmVyby1iYXNlZCBpbmRleCBvZiB0aGUgcGFnZSB0byBmZXRjaC5cbiAgICovXG4gIHBhZ2VJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGZldGNoIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgcGFnZVNpemU6IG51bWJlcjtcblxuICAvKipcbiAgICogU29ydCBvcmRlciBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgc29ydE9yZGVyOiBTb3J0T3JkZXJJdGVtW107XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byBzZWxlY3QgZnJvbS5cbiAgICovXG4gIHRhYmxlOiBUYWJsZTtcblxuICAvKipcbiAgICogVGhlIGZpbHRlciB0byBiZSBhcHBsaWVkLlxuICAgKi9cbiAgZmlsdGVyPzogRmlsdGVyR3JvdXA7XG59XG5cbmV4cG9ydCB0eXBlIEZpbHRlck9wZXJhdG9yID1cbiAgfCBcIj1cIlxuICB8IFwiIT1cIlxuICB8IFwiPlwiXG4gIHwgXCI+PVwiXG4gIHwgXCI8XCJcbiAgfCBcIjw9XCJcbiAgfCBcImlzXCJcbiAgfCBcImlzIG5vdFwiXG4gIHwgXCJsaWtlXCJcbiAgfCBcIm5vdCBsaWtlXCJcbiAgfCBcImlsaWtlXCJcbiAgfCBcIm5vdCBpbGlrZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkZpbHRlciB7XG4gIGtpbmQ6IFwiQ29sdW1uRmlsdGVyXCI7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3I7XG4gIHZhbHVlOiB1bmtub3duO1xuICBhZnRlcjogXCJhbmRcIiB8IFwib3JcIjtcbiAgaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cCB7XG4gIGtpbmQ6IFwiRmlsdGVyR3JvdXBcIjtcbiAgZmlsdGVyczogKENvbHVtbkZpbHRlciB8IEZpbHRlckdyb3VwKVtdO1xuICBhZnRlcjogXCJhbmRcIiB8IFwib3JcIjtcbiAgaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTb3J0T3JkZXJJdGVtIHtcbiAgLyoqXG4gICAqIFRoZSBjb2x1bW4gdG8gc29ydCBieS5cbiAgICovXG4gIGNvbHVtbjogQ29sdW1uTmFtZTtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGlvbiB0byBzb3J0IHRoZSBjb2x1bW4gYnkuXG4gICAqL1xuICBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb247XG59XG5cbmV4cG9ydCB0eXBlIFNvcnREaXJlY3Rpb24gPSBcImFzY1wiIHwgXCJkZXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBBZGFwdGVyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHF1ZXJ5PzogUXVlcnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclF1ZXJ5UmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyB0aGUgcXVlcnkgd291bGQgcmV0dXJuIGlmIG5vdCBsaW1pdGVkLlxuICAgKlxuICAgKiBJZiB0aGUgZGF0YWJhc2UgZG9lcyBub3Qgc3VwcG9ydCBjb3VudGluZyByb3dzLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gYEluZmluaXR5YC5cbiAgICovXG4gIGZpbHRlcmVkUm93Q291bnQ6IG51bWJlciB8IGJpZ2ludCB8IE51bWVyaWNTdHJpbmcgfCBCaWdJbnRTdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb3dzIHJldHVybmVkIGJ5IHRoZSBxdWVyeS5cbiAgICovXG4gIHJvd3M6IFJlY29yZDxDb2x1bW5OYW1lLCB1bmtub3duPltdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0ZWQgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgcXVlcnk6IFF1ZXJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJJbnNlcnREZXRhaWxzIHtcbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byBpbnNlcnQgaW50by5cbiAgICovXG4gIHRhYmxlOiBUYWJsZTtcblxuICAvKipcbiAgICogVGhlIHZhbHVlcyB0byBpbnNlcnQgaW50byB0aGUgdGFibGUuXG4gICAqIC0gVGhlIGtleXMgc2hvdWxkIG1hdGNoIHRoZSBjb2x1bW4gbmFtZXMgaW4gdGhlIHRhYmxlLlxuICAgKiAtIFRoZSB2YWx1ZXMgc2hvdWxkIGJlIHRoZSB2YWx1ZXMgdG8gaW5zZXJ0IGludG8gdGhlIHRhYmxlLlxuICAgKi9cbiAgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVySW5zZXJ0UmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBmcmVzaGx5IGluc2VydGVkIHJvdyBkYXRhLlxuICAgKi9cbiAgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcblxuICAvKipcbiAgICogVGhlIGV4ZWN1dGVkIHF1ZXJ5IHN0cmluZy5cbiAgICovXG4gIHF1ZXJ5OiBRdWVyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyVXBkYXRlRGV0YWlscyB7XG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRvIGFwcGx5IHRvIHRoZSByb3cuXG4gICAqL1xuICBjaGFuZ2VzOiBSZWNvcmQ8Q29sdW1uTmFtZSwgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSByb3cgdG8gdXBkYXRlLlxuICAgKi9cbiAgcm93OiBSZWNvcmQ8Q29sdW1uTmFtZSwgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byB1cGRhdGUgaW4uXG4gICAqL1xuICB0YWJsZTogVGFibGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclVwZGF0ZVJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgdXBkYXRlZCByb3cgZGF0YS5cbiAgICovXG4gIHJvdzogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+ICYge1xuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIGNoYW5nZXMgd2VyZSBhcHBsaWVkIGluIGRhdGFiYXNlIHRpbWUuXG4gICAgICovXG4gICAgX19wc191cGRhdGVkX2F0X186IHN0cmluZyB8IG51bWJlciB8IERhdGU7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRlZCBxdWVyeSBzdHJpbmcuXG4gICAqL1xuICBxdWVyeTogUXVlcnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckRlbGV0ZURldGFpbHMge1xuICAvKipcbiAgICogVGhlIHJvd3MgdG8gZGVsZXRlLlxuICAgKi9cbiAgcm93czogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+W107XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byBkZWxldGUgZnJvbS5cbiAgICovXG4gIHRhYmxlOiBUYWJsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyRGVsZXRlUmVzdWx0IHtcbiAgcm93czogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+W107XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRlZCBxdWVyeSBzdHJpbmcuXG4gICAqL1xuICBxdWVyeTogUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBZGFwdGVyRXJyb3IoYXJnczogeyBlcnJvcjogRXJyb3I7IHF1ZXJ5PzogUXVlcnkgfSkge1xuICBjb25zdCB7IGVycm9yLCBxdWVyeSB9ID0gYXJncztcblxuICBjb25zdCBhZGFwdGVyRXJyb3IgPSBlcnJvciBhcyBBZGFwdGVyRXJyb3I7XG5cbiAgYWRhcHRlckVycm9yLnF1ZXJ5ID0gcXVlcnk7XG5cbiAgcmV0dXJuIFthZGFwdGVyRXJyb3JdIGFzIFtBZGFwdGVyRXJyb3JdO1xufVxuIiwgImltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxuZXhwb3J0IGNvbnN0IFBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQTogUmVjb3JkPHN0cmluZywgUGljazxEYXRhVHlwZSwgXCJncm91cFwiPj4gPSB7XG4gIGJvb2w6IHtcbiAgICBncm91cDogXCJib29sZWFuXCIsXG4gIH0sXG4gIGJvb2xlYW46IHtcbiAgICBncm91cDogXCJib29sZWFuXCIsXG4gIH0sXG4gIGJ5dGVhOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGNoYXI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgY2l0ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCdcbiAgICovXG4gIGRhdGU6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICAvKipcbiAgICogQGV4YW1wbGUgJzEgZGF5IDIgaG91cnMnXG4gICAqL1xuICBpbnRlcnZhbDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBuYW1lOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHZhcmNoYXI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICAvKipcbiAgICogc2hvcnQgZm9ybSBvZiBgdGltZSB3aXRob3V0IHRpbWUgem9uZWAuXG4gICAqXG4gICAqIEBleGFtcGxlICcxNDozMDowMCdcbiAgICovXG4gIHRpbWU6IHtcbiAgICBncm91cDogXCJ0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBzaG9ydCBmb3JtIG9mIGB0aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCdcbiAgICovXG4gIHRpbWVzdGFtcDoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBzaG9ydCBmb3JtIG9mIGB0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCswMCdcbiAgICovXG4gIHRpbWVzdGFtcHR6OiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIGxvbmcgZm9ybSBvZiBgdGltZXN0YW1wYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDAnXG4gICAqL1xuICBcInRpbWVzdGFtcCB3aXRob3V0IHRpbWUgem9uZVwiOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIGxvbmcgZm9ybSBvZiBgdGltZXN0YW1wdHpgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCswMCdcbiAgICovXG4gIFwidGltZXN0YW1wIHdpdGggdGltZSB6b25lXCI6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICAvKipcbiAgICogc2hvcnQgZm9ybSBvZiBgdGltZSB3aXRoIHRpbWUgem9uZWAuXG4gICAqXG4gICAqIEBleGFtcGxlICcxNDozMDowMCswMDowMCdcbiAgICovXG4gIHRpbWV0ejoge1xuICAgIGdyb3VwOiBcInRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIGxvbmcgZm9ybSBvZiBgdGltZWAuXG4gICAqXG4gICAqIEBleGFtcGxlICcxNDozMDowMCdcbiAgICovXG4gIFwidGltZSB3aXRob3V0IHRpbWUgem9uZVwiOiB7XG4gICAgZ3JvdXA6IFwidGltZVwiLFxuICB9LFxuICAvKipcbiAgICogbG9uZyBmb3JtIG9mIGB0aW1ldHpgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCswMCdcbiAgICovXG4gIFwidGltZSB3aXRoIHRpbWUgem9uZVwiOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgdXVpZDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICAvLyBOdW1lcmljIHR5cGVzXG4gIGludDI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGludDQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGludDg6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIHNtYWxsaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBpbnRlZ2VyOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBiaWdpbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGRlY2ltYWw6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIG51bWVyaWM6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIHJlYWw6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGZsb2F0NDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZmxvYXQ4OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBcImRvdWJsZSBwcmVjaXNpb25cIjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAganNvbjoge1xuICAgIGdyb3VwOiBcImpzb25cIixcbiAgfSxcbiAganNvbmI6IHtcbiAgICBncm91cDogXCJqc29uXCIsXG4gIH0sXG59O1xuIiwgImltcG9ydCB7IEV4cHJlc3Npb24sIEV4cHJlc3Npb25CdWlsZGVyLCBzcWwsIFNxbEJvb2wgfSBmcm9tIFwia3lzZWx5XCI7XG5cbmltcG9ydCB0eXBlIHtcbiAgQWRhcHRlckRlbGV0ZURldGFpbHMsXG4gIEFkYXB0ZXJJbnNlcnREZXRhaWxzLFxuICBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgQ29sdW1uRmlsdGVyLFxuICBGaWx0ZXJHcm91cCxcbiAgVGFibGUsXG59IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgeyBhcHBseUluZmVycmVkUm93RmlsdGVycywgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBjb21waWxlIH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEJpZ0ludFN0cmluZyB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBnZXRQb3N0Z3JlU1FMQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcbmltcG9ydCB0eXBlIHsgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG4vKipcbiAqIGBjdGlkYCBpcyBhIHN5c3RlbSBjb2x1bW4gdGhhdCByZXByZXNlbnRzIHRoZSBwaHlzaWNhbCBsb2NhdGlvbiBvZiBhIHJvdyBpbiBhIHRhYmxlLlxuICogSXQgaXMgYSB0dXBsZSBvZiB0d28gaW50ZWdlcnM6IGAoYmxvY2tOdW1iZXIsIHR1cGxlSW5kZXgpYC5cbiAqIEl0IGlzIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSByb3cgaW4gYSB0YWJsZSwgZXZlbiBpZiB0aGUgcm93IGhhcyBubyBwcmltYXJ5IGtleSwgb3Igb3RoZXIgdW5pcXVlIGNvbnN0cmFpbnRzLlxuICpcbiAqIEV4YW1wbGU6ICcoMCwyMyknIHJlcHJlc2VudHMgdGhlIDI0dGggcm93IGluIHRoZSBmaXJzdCBibG9jayBvZiB0aGUgdGFibGUuXG4gKi9cbmV4cG9ydCB0eXBlIENUSURhc1RleHQgPSBgKCR7bnVtYmVyfSwke251bWJlcn0pYDtcblxuLyoqXG4gKiBJbnNlcnRzIG9uZSBvciBtb3JlIHJvd3MgaW50byBhIHRhYmxlIGFuZCByZXR1cm5zIHRoZSBpbnNlcnRlZCByb3dzIGFsb25nIHdpdGggdGhlaXIgYGN0aWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJJbnNlcnREZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHsgdGFibGUsIHJvd3MgfSA9IGRldGFpbHM7XG4gIGNvbnN0IHsgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEsIGNvbHVtbnMgfSA9IHRhYmxlO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCB7IGN0aWQ6IHVua25vd24gfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcbiAgY29uc3QgY29scyA9IE9iamVjdC5rZXlzKGNvbHVtbnMpO1xuICBjb25zdCBlbXB0eVJvd1dvcmthcm91bmQgPSB7IFtjb2xzWzBdIV06IHNxbGBkZWZhdWx0YCB9O1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC5pbnNlcnRJbnRvKHRhYmxlTmFtZSlcbiAgICAgIC52YWx1ZXMocm93cy5tYXAoKHJvdykgPT4gKE9iamVjdC5rZXlzKHJvdykubGVuZ3RoID09PSAwID8gZW1wdHlSb3dXb3JrYXJvdW5kIDogcm93KSkpXG4gICAgICAucmV0dXJuaW5nKGNvbHMpXG4gICAgICAucmV0dXJuaW5nKChlYikgPT4gZWIuY2FzdDxDVElEYXNUZXh0PihcImN0aWRcIiwgXCJ0ZXh0XCIpLmFzKFwiY3RpZFwiKSksXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgc2VsZWN0cyBhbGwgY29sdW1ucyBmcm9tIGEgdGFibGUsIGFsb25nIHdpdGggdGhlIGBjdGlkYCBjb2x1bW4sIGFuZCB1bmJvdW5kIHJvdyBjb3VudCBhcyBgb2lkYCAocmVzZXJ2ZWQgY29sdW1uIG5hbWUgdGhhdCBjYW5ub3QgY29uZmxpY3Qgd2l0aCB1c2VyIGNvbHVtbnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJRdWVyeURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHBhZ2VJbmRleCxcbiAgICBwYWdlU2l6ZSxcbiAgICBzb3J0T3JkZXIsXG4gICAgdGFibGU6IHsgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEsIGNvbHVtbnMgfSxcbiAgICBmaWx0ZXIgPSB7IGtpbmQ6IFwiRmlsdGVyR3JvdXBcIiwgYWZ0ZXI6IFwiYW5kXCIsIGZpbHRlcnM6IFtdIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCB7IGN0aWQ6IHVua25vd24gfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcbiAgY29uc3QgY29scyA9IE9iamVjdC5rZXlzKGNvbHVtbnMpO1xuXG4gIGNvbnN0IGNvdW50UXVlcnkgPSBidWlsZGVyXG4gICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgIC5zZWxlY3RGcm9tKHRhYmxlTmFtZSlcbiAgICAuc2VsZWN0KChlYikgPT4gZWIuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmZuLmNvYWxlc2NlKGViLmZuLmNvdW50QWxsKCksIHNxbC5saXQoMCkpLCBcInRleHRcIikuYXMoXCJvaWRcIikpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoKFwiY291bnRcIiwgKCkgPT4gY291bnRRdWVyeSlcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC5zZWxlY3RGcm9tKFt0YWJsZU5hbWUsIFwiY291bnRcIl0pXG4gICAgICAvLyBgb2lkYCBpcyBhIHJlc2VydmVkIGNvbHVtbiBuYW1lIGluIFBvc3RncmVTUUwsIHNvIHdlIHVzZSBpdCBhcyBhbiBhbGlhcyBmb3IgdGhlIHJvdyBjb3VudCB0byBub3QgY29uZmxpY3Qgd2l0aCB1c2VyIGNvbHVtbnMuXG4gICAgICAuc2VsZWN0KHNxbC5yZWYoXCJjb3VudC5vaWRcIikuJGNhc3RUbzxCaWdJbnRTdHJpbmc+KCkuYXMoXCJvaWRcIikpXG4gICAgICAuc2VsZWN0KChlYikgPT4gZWIuY2FzdDxDVElEYXNUZXh0PihcImN0aWRcIiwgXCJ0ZXh0XCIpLmFzKFwiY3RpZFwiKSlcbiAgICAgIC5zZWxlY3QoY29scylcbiAgICAgIC4kY2FsbCgocWIpID0+IHNvcnRPcmRlci5yZWR1Y2UoKHFiLCBpdGVtKSA9PiBxYi5vcmRlckJ5KGl0ZW0uY29sdW1uLCBpdGVtLmRpcmVjdGlvbiksIHFiKSlcbiAgICAgIC8vIFRPRE86IGN1cnNvciBwYWdpbmF0aW9uP1xuICAgICAgLndoZXJlKGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oZmlsdGVyLmZpbHRlcnMsIGNvbHVtbnMpKVxuICAgICAgLmxpbWl0KHBhZ2VTaXplKVxuICAgICAgLy8gd2UncmUgaW5qZWN0aW5nIHRoZSBvZmZzZXQgdmFsdWUgaGVyZSB0byBhdm9pZCBzZXJpYWxpemF0aW9uIGNvbXBsZXhpdHkgKGBiaWdpbnRgIGlzIGEgbm8tZ28gZm9yIGBKU09OLnN0cmluZ2lmeWApLlxuICAgICAgLm9mZnNldChzcWwubGl0KEJpZ0ludChwYWdlSW5kZXgpICogQmlnSW50KHBhZ2VTaXplKSkpLFxuICApO1xufVxuXG4vLyBIZWxwZXIgdG8gYnVpbGQgYW4gZXhwcmVzc2lvbiBidWlsZGVyIGZvciBhIHNpbmdsZSBmaWx0ZXIgb3IgYSBncm91cFxuZnVuY3Rpb24gYnVpbGRCYXNlRXhwcmVzc2lvbkJ1aWxkZXIoXG4gIHNwZWM6IENvbHVtbkZpbHRlciB8IEZpbHRlckdyb3VwLFxuICBjb2x1bW5zOiBUYWJsZVtcImNvbHVtbnNcIl0sXG4pOiAoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gRXhwcmVzc2lvbjxTcWxCb29sPiB7XG4gIGlmIChzcGVjLmtpbmQgPT09IFwiQ29sdW1uRmlsdGVyXCIpIHtcbiAgICByZXR1cm4gKGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbkluZm8gPSBjb2x1bW5zW3NwZWMuY29sdW1uXTtcbiAgICAgIGNvbnN0IHsgdmFsdWUsIG9wZXJhdG9yLCBjb2x1bW4gfSA9IHNwZWM7XG5cbiAgICAgIC8vIEZvciBlbnVtIHR5cGVzLCBjYXN0IHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGVudW0gdHlwZSB0byBhdm9pZCBQb3N0Z3JlU1FMIHR5cGUgZXJyb3JzXG4gICAgICBpZiAoY29sdW1uSW5mbz8uZGF0YXR5cGUuZ3JvdXAgPT09IFwiZW51bVwiICYmIHZhbHVlICE9IG51bGwgJiYgb3BlcmF0b3IgIT09IFwiaXNcIiAmJiBvcGVyYXRvciAhPT0gXCJpcyBub3RcIikge1xuICAgICAgICBjb25zdCBlbnVtVHlwZU5hbWUgPSBgXCIke2NvbHVtbkluZm8uZGF0YXR5cGUuc2NoZW1hfVwiLlwiJHtjb2x1bW5JbmZvLmRhdGF0eXBlLm5hbWV9XCJgO1xuICAgICAgICByZXR1cm4gZWIoZWIucmVmKGNvbHVtbiksIG9wZXJhdG9yLCBlYi5jYXN0KHNxbC5saXQodmFsdWUpLCBzcWwucmF3KGVudW1UeXBlTmFtZSkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGViKGViLnJlZihjb2x1bW4pLCBvcGVyYXRvciwgdmFsdWUpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oc3BlYy5maWx0ZXJzLCBjb2x1bW5zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uKFxuICBmaWx0ZXJzOiAoQ29sdW1uRmlsdGVyIHwgRmlsdGVyR3JvdXApW10sXG4gIGNvbHVtbnM6IFRhYmxlW1wiY29sdW1uc1wiXSxcbik6IChlYjogRXhwcmVzc2lvbkJ1aWxkZXI8YW55LCBhbnk+KSA9PiBFeHByZXNzaW9uPFNxbEJvb2w+IHtcbiAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gKGViKSA9PiBlYi5saXQodHJ1ZSk7IC8vIG5vIGZpbHRlcnMsIGFsd2F5cyB0cnVlXG5cbiAgY29uc3Qgb3JHcm91cHNPZkFuZEJ1aWxkZXJzOiAoKGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IEV4cHJlc3Npb248U3FsQm9vbD4pW11bXSA9IFtdO1xuICBsZXQgY3VycmVudEFuZEdyb3VwQnVpbGRlcnM6ICgoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gRXhwcmVzc2lvbjxTcWxCb29sPilbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKykge1xuICAgIGN1cnJlbnRBbmRHcm91cEJ1aWxkZXJzLnB1c2goYnVpbGRCYXNlRXhwcmVzc2lvbkJ1aWxkZXIoZmlsdGVyc1tpXSEsIGNvbHVtbnMpKTtcblxuICAgIC8vICZuIEFORCBncm91cCBlbmRzIGlmIGl0J3MgdGhlIGxhc3QgZmlsdGVyLCBvciB0aGUgaXRlbSBpcyBmb2xsb3dlZCBieSBhbiAnb3InXG4gICAgaWYgKGkgPT09IGZpbHRlcnMubGVuZ3RoIC0gMSB8fCBmaWx0ZXJzW2ldIS5hZnRlciA9PT0gXCJvclwiKSB7XG4gICAgICBvckdyb3Vwc09mQW5kQnVpbGRlcnMucHVzaChjdXJyZW50QW5kR3JvdXBCdWlsZGVycyk7XG4gICAgICBjdXJyZW50QW5kR3JvdXBCdWlsZGVycyA9IFtdOyAvLyBzdGFydCBhIG5ldyBncm91cFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4ge1xuICAgIGNvbnN0IGFuZEV4cHJlc3Npb25zID0gb3JHcm91cHNPZkFuZEJ1aWxkZXJzLm1hcCgoZ3JvdXApID0+IHtcbiAgICAgIHJldHVybiBlYi5hbmQoZ3JvdXAubWFwKChidWlsZGVyKSA9PiBidWlsZGVyKGViKSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGViLm9yKGFuZEV4cHJlc3Npb25zKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tTZWxlY3RRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjE6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGN0aWQ6IFwiKDAsMSlcIixcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMSxcbiAgICAgIG5hbWU6IFwiSm9obiBEb2VcIixcbiAgICAgIG9pZDogXCIyXCIsXG4gICAgICByb2xlOiBcImFkbWluXCIsXG4gICAgICBuYW1lX3JvbGU6IFwiSm9ubiBEb2UgLSBhZG1pblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoXCIyMDI1LTAxLTI2VDIwOjU2OjEyLjM0NVpcIiksXG4gICAgICBjdGlkOiBcIigwLDIpXCIsXG4gICAgICBkZWxldGVkX2F0OiBudWxsLFxuICAgICAgaWQ6IDIsXG4gICAgICBuYW1lOiBcIkphbmUgRG9lXCIsXG4gICAgICBvaWQ6IFwiMlwiLFxuICAgICAgcm9sZTogXCJwb3dlcnVzZXJcIixcbiAgICAgIG5hbWVfcm9sZTogXCJKYW5lIERvZSAtIHBvd2VydXNlclwiLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCBubyBuZWVkIHRvIGdvIG92ZXJib2FyZFxuICAgIFtLIGluIFJldHVyblR5cGU8dHlwZW9mIG1vY2tUYWJsZXNRdWVyeT5bMV1bXCJjb2x1bW5zXCJdW251bWJlcl1bXCJuYW1lXCJdIHwgXCJjdGlkXCIgfCBcIm9pZFwiXTogdW5rbm93bjtcbiAgfVtdO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHVwZGF0ZXMgYSBnaXZlbiByb3cgaW4gYSB0YWJsZSB3aXRoIGdpdmVuIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcGRhdGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclVwZGF0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGNoYW5nZXMsXG4gICAgcm93LFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCB7IGN0aWQ6IHVua25vd24gfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcbiAgY29uc3QgY29scyA9IE9iamVjdC5rZXlzKGNvbHVtbnMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC51cGRhdGVUYWJsZSh0YWJsZU5hbWUpXG4gICAgICAuc2V0KGNoYW5nZXMpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMoW3Jvd10sIGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhjb2xzKVxuICAgICAgLnJldHVybmluZygoZWIpID0+IFtcbiAgICAgICAgZWIuY2FzdDxDVElEYXNUZXh0PihcImN0aWRcIiwgXCJ0ZXh0XCIpLmFzKFwiY3RpZFwiKSxcbiAgICAgICAgZWJcbiAgICAgICAgICAuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmZuKFwiZmxvb3JcIiwgW2ViKGViLmZuKFwiZXh0cmFjdFwiLCBbc3FsYGVwb2NoIGZyb20gbm93KClgXSksIFwiKlwiLCAxXzAwMF8wMDApXSksIFwidGV4dFwiKVxuICAgICAgICAgIC5hcyhcIl9fcHNfdXBkYXRlZF9hdF9fXCIpLFxuICAgICAgXSksXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgZGVsZXRlcyBhIGdpdmVuIHNldCBvZiByb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlUXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJEZWxldGVEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICByb3dzLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCB7IGN0aWQ6IHVua25vd24gfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShidWlsZGVyLndpdGhTY2hlbWEoc2NoZW1hKS5kZWxldGVGcm9tKHRhYmxlTmFtZSkuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMocm93cywgY29sdW1ucykpKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcmF3LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBBbGlhc05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hbGlhcy1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IE5PT1BfUVVFUllfRVhFQ1VUT1IgfSBmcm9tICcuLi9xdWVyeS1leGVjdXRvci9ub29wLXF1ZXJ5LWV4ZWN1dG9yLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IGlzT3BlcmF0aW9uTm9kZVNvdXJjZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXNvdXJjZS5qcyc7XG5jbGFzcyBSYXdCdWlsZGVySW1wbCB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgZ2V0IGV4cHJlc3Npb25UeXBlKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgaXNSYXdCdWlsZGVyKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbGlhc2VkUmF3QnVpbGRlckltcGwodGhpcywgYWxpYXMpO1xuICAgIH1cbiAgICAkY2FzdFRvKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJhd0J1aWxkZXJJbXBsKHsgLi4udGhpcy4jcHJvcHMgfSk7XG4gICAgfVxuICAgICRub3ROdWxsKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJhd0J1aWxkZXJJbXBsKHRoaXMuI3Byb3BzKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYXdCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHBsdWdpbnM6IHRoaXMuI3Byb3BzLnBsdWdpbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZnJlZXplKFsuLi50aGlzLiNwcm9wcy5wbHVnaW5zLCBwbHVnaW5dKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKFtwbHVnaW5dKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RvT3BlcmF0aW9uTm9kZSh0aGlzLiNnZXRFeGVjdXRvcigpKTtcbiAgICB9XG4gICAgY29tcGlsZShleGVjdXRvclByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjb21waWxlKHRoaXMuI2dldEV4ZWN1dG9yKGV4ZWN1dG9yUHJvdmlkZXIpKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZShleGVjdXRvclByb3ZpZGVyKSB7XG4gICAgICAgIGNvbnN0IGV4ZWN1dG9yID0gdGhpcy4jZ2V0RXhlY3V0b3IoZXhlY3V0b3JQcm92aWRlcik7XG4gICAgICAgIHJldHVybiBleGVjdXRvci5leGVjdXRlUXVlcnkodGhpcy4jY29tcGlsZShleGVjdXRvciksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICAjZ2V0RXhlY3V0b3IoZXhlY3V0b3JQcm92aWRlcikge1xuICAgICAgICBjb25zdCBleGVjdXRvciA9IGV4ZWN1dG9yUHJvdmlkZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBleGVjdXRvclByb3ZpZGVyLmdldEV4ZWN1dG9yKClcbiAgICAgICAgICAgIDogTk9PUF9RVUVSWV9FWEVDVVRPUjtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLnBsdWdpbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBleGVjdXRvci53aXRoUGx1Z2lucyh0aGlzLiNwcm9wcy5wbHVnaW5zKVxuICAgICAgICAgICAgOiBleGVjdXRvcjtcbiAgICB9XG4gICAgI3RvT3BlcmF0aW9uTm9kZShleGVjdXRvcikge1xuICAgICAgICByZXR1cm4gZXhlY3V0b3IudHJhbnNmb3JtUXVlcnkodGhpcy4jcHJvcHMucmF3Tm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgICNjb21waWxlKGV4ZWN1dG9yKSB7XG4gICAgICAgIHJldHVybiBleGVjdXRvci5jb21waWxlUXVlcnkodGhpcy4jdG9PcGVyYXRpb25Ob2RlKGV4ZWN1dG9yKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJhd0J1aWxkZXIocHJvcHMpIHtcbiAgICByZXR1cm4gbmV3IFJhd0J1aWxkZXJJbXBsKHByb3BzKTtcbn1cbmNsYXNzIEFsaWFzZWRSYXdCdWlsZGVySW1wbCB7XG4gICAgI3Jhd0J1aWxkZXI7XG4gICAgI2FsaWFzO1xuICAgIGNvbnN0cnVjdG9yKHJhd0J1aWxkZXIsIGFsaWFzKSB7XG4gICAgICAgIHRoaXMuI3Jhd0J1aWxkZXIgPSByYXdCdWlsZGVyO1xuICAgICAgICB0aGlzLiNhbGlhcyA9IGFsaWFzO1xuICAgIH1cbiAgICBnZXQgZXhwcmVzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Jhd0J1aWxkZXI7XG4gICAgfVxuICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2FsaWFzO1xuICAgIH1cbiAgICBnZXQgcmF3QnVpbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Jhd0J1aWxkZXI7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIEFsaWFzTm9kZS5jcmVhdGUodGhpcy4jcmF3QnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSwgaXNPcGVyYXRpb25Ob2RlU291cmNlKHRoaXMuI2FsaWFzKVxuICAgICAgICAgICAgPyB0aGlzLiNhbGlhcy50b09wZXJhdGlvbk5vZGUoKVxuICAgICAgICAgICAgOiBJZGVudGlmaWVyTm9kZS5jcmVhdGUodGhpcy4jYWxpYXMpKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NxbC5kLnRzXCIgLz5cbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IGlzT3BlcmF0aW9uTm9kZVNvdXJjZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXNvdXJjZS5qcyc7XG5pbXBvcnQgeyBSYXdOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcmF3LW5vZGUuanMnO1xuaW1wb3J0IHsgVmFsdWVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvdmFsdWUtbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVN0cmluZ1JlZmVyZW5jZSB9IGZyb20gJy4uL3BhcnNlci9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGUgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVFeHByZXNzaW9uIH0gZnJvbSAnLi4vcGFyc2VyL3ZhbHVlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVRdWVyeUlkIH0gZnJvbSAnLi4vdXRpbC9xdWVyeS1pZC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSYXdCdWlsZGVyIH0gZnJvbSAnLi9yYXctYnVpbGRlci5qcyc7XG5leHBvcnQgY29uc3Qgc3FsID0gT2JqZWN0LmFzc2lnbigoc3FsRnJhZ21lbnRzLCAuLi5wYXJhbWV0ZXJzKSA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZVJhd0J1aWxkZXIoe1xuICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgIHJhd05vZGU6IFJhd05vZGUuY3JlYXRlKHNxbEZyYWdtZW50cywgcGFyYW1ldGVycz8ubWFwKHBhcnNlUGFyYW1ldGVyKSA/PyBbXSksXG4gICAgfSk7XG59LCB7XG4gICAgcmVmKGNvbHVtblJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhDaGlsZChwYXJzZVN0cmluZ1JlZmVyZW5jZShjb2x1bW5SZWZlcmVuY2UpKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICB2YWwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJhd0J1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgcmF3Tm9kZTogUmF3Tm9kZS5jcmVhdGVXaXRoQ2hpbGQocGFyc2VWYWx1ZUV4cHJlc3Npb24odmFsdWUpKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWwodmFsdWUpO1xuICAgIH0sXG4gICAgdGFibGUodGFibGVSZWZlcmVuY2UpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJhd0J1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgcmF3Tm9kZTogUmF3Tm9kZS5jcmVhdGVXaXRoQ2hpbGQocGFyc2VUYWJsZSh0YWJsZVJlZmVyZW5jZSkpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGlkKC4uLmlkcykge1xuICAgICAgICBjb25zdCBmcmFnbWVudHMgPSBuZXcgQXJyYXkoaWRzLmxlbmd0aCArIDEpLmZpbGwoJy4nKTtcbiAgICAgICAgZnJhZ21lbnRzWzBdID0gJyc7XG4gICAgICAgIGZyYWdtZW50c1tmcmFnbWVudHMubGVuZ3RoIC0gMV0gPSAnJztcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJhd0J1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgcmF3Tm9kZTogUmF3Tm9kZS5jcmVhdGUoZnJhZ21lbnRzLCBpZHMubWFwKElkZW50aWZpZXJOb2RlLmNyZWF0ZSkpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGxpdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhDaGlsZChWYWx1ZU5vZGUuY3JlYXRlSW1tZWRpYXRlKHZhbHVlKSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgbGl0ZXJhbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5saXQodmFsdWUpO1xuICAgIH0sXG4gICAgcmF3KHNxbCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhTcWwoc3FsKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBqb2luKGFycmF5LCBzZXBhcmF0b3IgPSBzcWwgYCwgYCkge1xuICAgICAgICBjb25zdCBub2RlcyA9IG5ldyBBcnJheShNYXRoLm1heCgyICogYXJyYXkubGVuZ3RoIC0gMSwgMCkpO1xuICAgICAgICBjb25zdCBzZXAgPSBzZXBhcmF0b3IudG9PcGVyYXRpb25Ob2RlKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIG5vZGVzWzIgKiBpXSA9IHBhcnNlUGFyYW1ldGVyKGFycmF5W2ldKTtcbiAgICAgICAgICAgIGlmIChpICE9PSBhcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgbm9kZXNbMiAqIGkgKyAxXSA9IHNlcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhDaGlsZHJlbihub2RlcyksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbmZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVyKHBhcmFtKSB7XG4gICAgaWYgKGlzT3BlcmF0aW9uTm9kZVNvdXJjZShwYXJhbSkpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtLnRvT3BlcmF0aW9uTm9kZSgpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VWYWx1ZUV4cHJlc3Npb24ocGFyYW0pO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kZWZhdWx0LXF1ZXJ5LWNvbXBpbGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgQ3JlYXRlVGFibGVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXRhYmxlLW5vZGUuanMnO1xuaW1wb3J0IHsgSW5zZXJ0UXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaW5zZXJ0LXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgT3BlcmF0aW9uTm9kZVZpc2l0b3IgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vcGVyYXRpb24tbm9kZS12aXNpdG9yLmpzJztcbmltcG9ydCB7IE9wZXJhdG9yTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdG9yLW5vZGUuanMnO1xuaW1wb3J0IHsgUGFyZW5zTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3BhcmVucy1ub2RlLmpzJztcbmltcG9ydCB7IFF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3F1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgZnJlZXplLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzQm9vbGVhbiwgaXNOdWxsLCBpc0RhdGUsIGlzQmlnSW50LCB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IENyZWF0ZVZpZXdOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXZpZXctbm9kZS5qcyc7XG5pbXBvcnQgeyBTZXRPcGVyYXRpb25Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvc2V0LW9wZXJhdGlvbi1ub2RlLmpzJztcbmltcG9ydCB7IE1lcmdlUXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvbWVyZ2UtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBsb2dPbmNlIH0gZnJvbSAnLi4vdXRpbC9sb2ctb25jZS5qcyc7XG5jb25zdCBMSVRfV1JBUF9SRUdFWCA9IC8nL2c7XG5leHBvcnQgY2xhc3MgRGVmYXVsdFF1ZXJ5Q29tcGlsZXIgZXh0ZW5kcyBPcGVyYXRpb25Ob2RlVmlzaXRvciB7XG4gICAgI3NxbCA9ICcnO1xuICAgICNwYXJhbWV0ZXJzID0gW107XG4gICAgZ2V0IG51bVBhcmFtZXRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXJhbWV0ZXJzLmxlbmd0aDtcbiAgICB9XG4gICAgY29tcGlsZVF1ZXJ5KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgdGhpcy4jc3FsID0gJyc7XG4gICAgICAgIHRoaXMuI3BhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5ub2RlU3RhY2suc3BsaWNlKDAsIHRoaXMubm9kZVN0YWNrLmxlbmd0aCk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUpO1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIHF1ZXJ5OiBub2RlLFxuICAgICAgICAgICAgcXVlcnlJZCxcbiAgICAgICAgICAgIHNxbDogdGhpcy5nZXRTcWwoKSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IFsuLi50aGlzLiNwYXJhbWV0ZXJzXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldFNxbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3NxbDtcbiAgICB9XG4gICAgdmlzaXRTZWxlY3RRdWVyeShub2RlKSB7XG4gICAgICAgIGNvbnN0IHdyYXBJblBhcmVucyA9IHRoaXMucGFyZW50Tm9kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAhUGFyZW5zTm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpICYmXG4gICAgICAgICAgICAhSW5zZXJ0UXVlcnlOb2RlLmlzKHRoaXMucGFyZW50Tm9kZSkgJiZcbiAgICAgICAgICAgICFDcmVhdGVUYWJsZU5vZGUuaXModGhpcy5wYXJlbnROb2RlKSAmJlxuICAgICAgICAgICAgIUNyZWF0ZVZpZXdOb2RlLmlzKHRoaXMucGFyZW50Tm9kZSkgJiZcbiAgICAgICAgICAgICFTZXRPcGVyYXRpb25Ob2RlLmlzKHRoaXMucGFyZW50Tm9kZSk7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudE5vZGUgPT09IHVuZGVmaW5lZCAmJiBub2RlLmV4cGxhaW4pIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwbGFpbik7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3cmFwSW5QYXJlbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2l0aCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aXRoKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ3NlbGVjdCcpO1xuICAgICAgICBpZiAobm9kZS5kaXN0aW5jdE9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlRGlzdGluY3RPbihub2RlLmRpc3RpbmN0T24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmZyb250TW9kaWZpZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZnJvbnRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudG9wKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50b3ApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnNlbGVjdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuc2VsZWN0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZnJvbSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuam9pbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuam9pbnMsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2hlcmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndoZXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5ncm91cEJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5ncm91cEJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5oYXZpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmhhdmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuc2V0T3BlcmF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5zZXRPcGVyYXRpb25zLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9yZGVyQnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9yZGVyQnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmxpbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5saW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub2Zmc2V0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmZldGNoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5mZXRjaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KHRoaXMuc29ydFNlbGVjdE1vZGlmaWVycyhbLi4ubm9kZS5lbmRNb2RpZmllcnNdKSwgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod3JhcEluUGFyZW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RnJvbShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdmcm9tICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZnJvbXMpO1xuICAgIH1cbiAgICB2aXNpdFNlbGVjdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuc2VsZWN0aW9uKTtcbiAgICB9XG4gICAgdmlzaXRDb2x1bW4obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgfVxuICAgIGNvbXBpbGVEaXN0aW5jdE9uKGV4cHJlc3Npb25zKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkaXN0aW5jdCBvbiAoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3QoZXhwcmVzc2lvbnMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICBjb21waWxlTGlzdChub2Rlcywgc2VwYXJhdG9yID0gJywgJykge1xuICAgICAgICBjb25zdCBsYXN0SW5kZXggPSBub2Rlcy5sZW5ndGggLSAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBsYXN0SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZXNbaV0pO1xuICAgICAgICAgICAgaWYgKGkgPCBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZChzZXBhcmF0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0V2hlcmUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnd2hlcmUgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2hlcmUpO1xuICAgIH1cbiAgICB2aXNpdEhhdmluZyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdoYXZpbmcgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuaGF2aW5nKTtcbiAgICB9XG4gICAgdmlzaXRJbnNlcnRRdWVyeShub2RlKSB7XG4gICAgICAgIGNvbnN0IHJvb3RRdWVyeU5vZGUgPSB0aGlzLm5vZGVTdGFjay5maW5kKFF1ZXJ5Tm9kZS5pcyk7XG4gICAgICAgIGNvbnN0IGlzU3ViUXVlcnkgPSByb290UXVlcnlOb2RlICE9PSBub2RlO1xuICAgICAgICBpZiAoIWlzU3ViUXVlcnkgJiYgbm9kZS5leHBsYWluKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cGxhaW4pO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdWJRdWVyeSAmJiAhTWVyZ2VRdWVyeU5vZGUuaXMocm9vdFF1ZXJ5Tm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2l0aCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aXRoKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5yZXBsYWNlID8gJ3JlcGxhY2UnIDogJ2luc2VydCcpO1xuICAgICAgICAvLyBUT0RPOiByZW1vdmUgaW4gMC4yOS5cbiAgICAgICAgaWYgKG5vZGUuaWdub3JlKSB7XG4gICAgICAgICAgICBsb2dPbmNlKCdgSW5zZXJ0UXVlcnlOb2RlLmlnbm9yZWAgaXMgZGVwcmVjYXRlZC4gVXNlIGBJbnNlcnRRdWVyeU5vZGUub3JBY3Rpb25gIGluc3RlYWQuJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGlnbm9yZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9yQWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vckFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudG9wKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50b3ApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmludG8pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgaW50byAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuaW50byk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuY29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAoJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm91dHB1dCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3V0cHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS52YWx1ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZGVmYXVsdFZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdkZWZhdWx0IHZhbHVlcycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9uQ29uZmxpY3QpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9uQ29uZmxpY3QpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9uRHVwbGljYXRlS2V5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vbkR1cGxpY2F0ZUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucmV0dXJuaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZXR1cm5pbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N1YlF1ZXJ5ICYmICFNZXJnZVF1ZXJ5Tm9kZS5pcyhyb290UXVlcnlOb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5lbmRNb2RpZmllcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5lbmRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRWYWx1ZXMobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgndmFsdWVzICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUudmFsdWVzKTtcbiAgICB9XG4gICAgdmlzaXREZWxldGVRdWVyeShub2RlKSB7XG4gICAgICAgIGNvbnN0IGlzU3ViUXVlcnkgPSB0aGlzLm5vZGVTdGFjay5maW5kKFF1ZXJ5Tm9kZS5pcykgIT09IG5vZGU7XG4gICAgICAgIGlmICghaXNTdWJRdWVyeSAmJiBub2RlLmV4cGxhaW4pIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwbGFpbik7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N1YlF1ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndpdGgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2l0aCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkZWxldGUgJyk7XG4gICAgICAgIGlmIChub2RlLnRvcCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50b3ApO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmZyb20pO1xuICAgICAgICBpZiAobm9kZS5vdXRwdXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudXNpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnVzaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5qb2lucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5qb2lucywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aGVyZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2hlcmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9yZGVyQnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9yZGVyQnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmxpbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5saW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucmV0dXJuaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZXR1cm5pbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N1YlF1ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmVuZE1vZGlmaWVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmVuZE1vZGlmaWVycywgJyAnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFJldHVybmluZyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdyZXR1cm5pbmcgJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5zZWxlY3Rpb25zKTtcbiAgICB9XG4gICAgdmlzaXRBbGlhcyhub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubm9kZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgYXMgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuYWxpYXMpO1xuICAgIH1cbiAgICB2aXNpdFJlZmVyZW5jZShub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2x1bW4pO1xuICAgIH1cbiAgICB2aXNpdFNlbGVjdEFsbChfKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcqJyk7XG4gICAgfVxuICAgIHZpc2l0SWRlbnRpZmllcihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuZ2V0TGVmdElkZW50aWZpZXJXcmFwcGVyKCkpO1xuICAgICAgICB0aGlzLmNvbXBpbGVVbndyYXBwZWRJZGVudGlmaWVyKG5vZGUpO1xuICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLmdldFJpZ2h0SWRlbnRpZmllcldyYXBwZXIoKSk7XG4gICAgfVxuICAgIGNvbXBpbGVVbndyYXBwZWRJZGVudGlmaWVyKG5vZGUpIHtcbiAgICAgICAgaWYgKCFpc1N0cmluZyhub2RlLm5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Egbm9uLXN0cmluZyBpZGVudGlmaWVyIHdhcyBwYXNzZWQgdG8gY29tcGlsZVVud3JhcHBlZElkZW50aWZpZXIuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5zYW5pdGl6ZUlkZW50aWZpZXIobm9kZS5uYW1lKSk7XG4gICAgfVxuICAgIHZpc2l0QW5kKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5sZWZ0KTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyBhbmQgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmlnaHQpO1xuICAgIH1cbiAgICB2aXNpdE9yKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5sZWZ0KTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyBvciAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yaWdodCk7XG4gICAgfVxuICAgIHZpc2l0VmFsdWUobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5pbW1lZGlhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kSW1tZWRpYXRlVmFsdWUobm9kZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZFZhbHVlKG5vZGUudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0VmFsdWVMaXN0KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnZhbHVlcyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgfVxuICAgIHZpc2l0VHVwbGUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUudmFsdWVzKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgdmlzaXRQcmltaXRpdmVWYWx1ZUxpc3Qobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICBjb25zdCB7IHZhbHVlcyB9ID0gbm9kZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kVmFsdWUodmFsdWVzW2ldKTtcbiAgICAgICAgICAgIGlmIChpICE9PSB2YWx1ZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcsICcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgfVxuICAgIHZpc2l0UGFyZW5zKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5ub2RlKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgdmlzaXRKb2luKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoSk9JTl9UWVBFX1NRTFtub2RlLmpvaW5UeXBlXSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICBpZiAobm9kZS5vbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0T24obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnb24gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub24pO1xuICAgIH1cbiAgICB2aXNpdFJhdyhub2RlKSB7XG4gICAgICAgIGNvbnN0IHsgc3FsRnJhZ21lbnRzLCBwYXJhbWV0ZXJzOiBwYXJhbXMgfSA9IG5vZGU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3FsRnJhZ21lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZChzcWxGcmFnbWVudHNbaV0pO1xuICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPiBpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUocGFyYW1zW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE9wZXJhdG9yKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5vcGVyYXRvcik7XG4gICAgfVxuICAgIHZpc2l0VGFibGUobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICB9XG4gICAgdmlzaXRTY2hlbWFibGVJZGVudGlmaWVyKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuc2NoZW1hKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnNjaGVtYSk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuaWRlbnRpZmllcik7XG4gICAgfVxuICAgIHZpc2l0Q3JlYXRlVGFibGUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnY3JlYXRlICcpO1xuICAgICAgICBpZiAobm9kZS5mcm9udE1vZGlmaWVycyAmJiBub2RlLmZyb250TW9kaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5mcm9udE1vZGlmaWVycywgJyAnKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudGVtcG9yYXJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgndGVtcG9yYXJ5ICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCd0YWJsZSAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZOb3RFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBub3QgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICBpZiAobm9kZS5zZWxlY3RRdWVyeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBhcyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuc2VsZWN0UXVlcnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAoJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KFsuLi5ub2RlLmNvbHVtbnMsIC4uLihub2RlLmNvbnN0cmFpbnRzID8/IFtdKV0pO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgICAgIGlmIChub2RlLm9uQ29tbWl0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBvbiBjb21taXQgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5vbkNvbW1pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZS5lbmRNb2RpZmllcnMgJiYgbm9kZS5lbmRNb2RpZmllcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmVuZE1vZGlmaWVycywgJyAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdENvbHVtbkRlZmluaXRpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS5pZk5vdEV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIG5vdCBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2x1bW4pO1xuICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRhdGFUeXBlKTtcbiAgICAgICAgaWYgKG5vZGUudW5zaWduZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgdW5zaWduZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5mcm9udE1vZGlmaWVycyAmJiBub2RlLmZyb250TW9kaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZnJvbnRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZ2VuZXJhdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5nZW5lcmF0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmlkZW50aXR5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGlkZW50aXR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZGVmYXVsdFRvKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5kZWZhdWx0VG8pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm5vdE51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgbm90IG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS51bmlxdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgdW5pcXVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubnVsbHNOb3REaXN0aW5jdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBudWxscyBub3QgZGlzdGluY3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5wcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHByaW1hcnkga2V5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYXV0b0luY3JlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuZ2V0QXV0b0luY3JlbWVudCgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5yZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZWZlcmVuY2VzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5jaGVjaykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY2hlY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmVuZE1vZGlmaWVycyAmJiBub2RlLmVuZE1vZGlmaWVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmVuZE1vZGlmaWVycywgJyAnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRBdXRvSW5jcmVtZW50KCkge1xuICAgICAgICByZXR1cm4gJ2F1dG9faW5jcmVtZW50JztcbiAgICB9XG4gICAgdmlzaXRSZWZlcmVuY2VzKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3JlZmVyZW5jZXMgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnICgnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICBpZiAobm9kZS5vbkRlbGV0ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBvbiBkZWxldGUgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZChub2RlLm9uRGVsZXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vblVwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBvbiB1cGRhdGUgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZChub2RlLm9uVXBkYXRlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdERyb3BUYWJsZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkcm9wIHRhYmxlICcpO1xuICAgICAgICBpZiAobm9kZS5pZkV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgaWYgKG5vZGUuY2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBjYXNjYWRlJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXREYXRhVHlwZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUuZGF0YVR5cGUpO1xuICAgIH1cbiAgICB2aXNpdE9yZGVyQnkobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnb3JkZXIgYnkgJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5pdGVtcyk7XG4gICAgfVxuICAgIHZpc2l0T3JkZXJCeUl0ZW0obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9yZGVyQnkpO1xuICAgICAgICBpZiAobm9kZS5jb2xsYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbGxhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5kaXJlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm51bGxzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG51bGxzICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5udWxscyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRHcm91cEJ5KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2dyb3VwIGJ5ICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuaXRlbXMpO1xuICAgIH1cbiAgICB2aXNpdEdyb3VwQnlJdGVtKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5ncm91cEJ5KTtcbiAgICB9XG4gICAgdmlzaXRVcGRhdGVRdWVyeShub2RlKSB7XG4gICAgICAgIGNvbnN0IHJvb3RRdWVyeU5vZGUgPSB0aGlzLm5vZGVTdGFjay5maW5kKFF1ZXJ5Tm9kZS5pcyk7XG4gICAgICAgIGNvbnN0IGlzU3ViUXVlcnkgPSByb290UXVlcnlOb2RlICE9PSBub2RlO1xuICAgICAgICBpZiAoIWlzU3ViUXVlcnkgJiYgbm9kZS5leHBsYWluKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cGxhaW4pO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdWJRdWVyeSAmJiAhTWVyZ2VRdWVyeU5vZGUuaXMocm9vdFF1ZXJ5Tm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2l0aCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aXRoKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ3VwZGF0ZSAnKTtcbiAgICAgICAgaWYgKG5vZGUudG9wKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRvcCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ3NldCAnKTtcbiAgICAgICAgaWYgKG5vZGUudXBkYXRlcykge1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnVwZGF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm91dHB1dCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3V0cHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5mcm9tKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5mcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5qb2lucykge1xuICAgICAgICAgICAgaWYgKCFub2RlLmZyb20pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJKb2lucyBpbiBhbiB1cGRhdGUgcXVlcnkgYXJlIG9ubHkgc3VwcG9ydGVkIGFzIGEgcGFydCBvZiBhIFBvc3RncmVTUUwgJ3VwZGF0ZSBzZXQgZnJvbSBqb2luJyBxdWVyeS4gSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgTXlTUUwgJ3VwZGF0ZSBqb2luIHNldCcgcXVlcnksIHNlZSBodHRwczovL2t5c2VseS5kZXYvZG9jcy9leGFtcGxlcy91cGRhdGUvbXktc3FsLWpvaW5zXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5qb2lucywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aGVyZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2hlcmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9yZGVyQnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9yZGVyQnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmxpbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5saW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucmV0dXJuaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZXR1cm5pbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N1YlF1ZXJ5ICYmICFNZXJnZVF1ZXJ5Tm9kZS5pcyhyb290UXVlcnlOb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5lbmRNb2RpZmllcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5lbmRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRDb2x1bW5VcGRhdGUobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgPSAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS52YWx1ZSk7XG4gICAgfVxuICAgIHZpc2l0TGltaXQobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnbGltaXQgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGltaXQpO1xuICAgIH1cbiAgICB2aXNpdE9mZnNldChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdvZmZzZXQgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub2Zmc2V0KTtcbiAgICB9XG4gICAgdmlzaXRPbkNvbmZsaWN0KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ29uIGNvbmZsaWN0Jyk7XG4gICAgICAgIGlmIChub2RlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlLmNvbnN0cmFpbnQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gY29uc3RyYWludCAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29uc3RyYWludCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9kZS5pbmRleEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5pbmRleEV4cHJlc3Npb24pO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5pbmRleFdoZXJlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5pbmRleFdoZXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kb05vdGhpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgZG8gbm90aGluZycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vZGUudXBkYXRlcykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBkbyB1cGRhdGUgc2V0ICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnVwZGF0ZXMpO1xuICAgICAgICAgICAgaWYgKG5vZGUudXBkYXRlV2hlcmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudXBkYXRlV2hlcmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0T25EdXBsaWNhdGVLZXkobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnb24gZHVwbGljYXRlIGtleSB1cGRhdGUgJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS51cGRhdGVzKTtcbiAgICB9XG4gICAgdmlzaXRDcmVhdGVJbmRleChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjcmVhdGUgJyk7XG4gICAgICAgIGlmIChub2RlLnVuaXF1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3VuaXF1ZSAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnaW5kZXggJyk7XG4gICAgICAgIGlmIChub2RlLmlmTm90RXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgbm90IGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICBpZiAobm9kZS50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBvbiAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnVzaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHVzaW5nICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS51c2luZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuY29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAoJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm51bGxzTm90RGlzdGluY3QpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgbnVsbHMgbm90IGRpc3RpbmN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2hlcmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndoZXJlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdERyb3BJbmRleChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkcm9wIGluZGV4ICcpO1xuICAgICAgICBpZiAobm9kZS5pZkV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICBpZiAobm9kZS50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBvbiAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNhc2NhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgY2FzY2FkZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0Q3JlYXRlU2NoZW1hKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2NyZWF0ZSBzY2hlbWEgJyk7XG4gICAgICAgIGlmIChub2RlLmlmTm90RXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgbm90IGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnNjaGVtYSk7XG4gICAgfVxuICAgIHZpc2l0RHJvcFNjaGVtYShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkcm9wIHNjaGVtYSAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5zY2hlbWEpO1xuICAgICAgICBpZiAobm9kZS5jYXNjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGNhc2NhZGUnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFByaW1hcnlLZXlDb25zdHJhaW50KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUubmFtZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2NvbnN0cmFpbnQgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgncHJpbWFyeSBrZXkgKCcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIHRoaXMuYnVpbGREZWZlcnJhYmxlKG5vZGUpO1xuICAgIH1cbiAgICBidWlsZERlZmVycmFibGUobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5kZWZlcnJhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChub2RlLmRlZmVycmFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGRlZmVycmFibGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgbm90IGRlZmVycmFibGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5pbml0aWFsbHlEZWZlcnJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5pbml0aWFsbHlEZWZlcnJlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgaW5pdGlhbGx5IGRlZmVycmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGluaXRpYWxseSBpbW1lZGlhdGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFVuaXF1ZUNvbnN0cmFpbnQobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnY29uc3RyYWludCAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCd1bmlxdWUnKTtcbiAgICAgICAgaWYgKG5vZGUubnVsbHNOb3REaXN0aW5jdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBudWxscyBub3QgZGlzdGluY3QnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnICgnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB0aGlzLmJ1aWxkRGVmZXJyYWJsZShub2RlKTtcbiAgICB9XG4gICAgdmlzaXRDaGVja0NvbnN0cmFpbnQobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnY29uc3RyYWludCAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjaGVjayAoJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgfVxuICAgIHZpc2l0Rm9yZWlnbktleUNvbnN0cmFpbnQobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnY29uc3RyYWludCAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdmb3JlaWduIGtleSAoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJykgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmVmZXJlbmNlcyk7XG4gICAgICAgIGlmIChub2RlLm9uRGVsZXRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uIGRlbGV0ZSAnKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5vZGUub25EZWxldGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9uVXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uIHVwZGF0ZSAnKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5vZGUub25VcGRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVpbGREZWZlcnJhYmxlKG5vZGUpO1xuICAgIH1cbiAgICB2aXNpdExpc3Qobm9kZSkge1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuaXRlbXMpO1xuICAgIH1cbiAgICB2aXNpdFdpdGgobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnd2l0aCAnKTtcbiAgICAgICAgaWYgKG5vZGUucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgncmVjdXJzaXZlICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5leHByZXNzaW9ucyk7XG4gICAgfVxuICAgIHZpc2l0Q29tbW9uVGFibGVFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyBhcyAnKTtcbiAgICAgICAgaWYgKGlzQm9vbGVhbihub2RlLm1hdGVyaWFsaXplZCkpIHtcbiAgICAgICAgICAgIGlmICghbm9kZS5tYXRlcmlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnbm90ICcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ21hdGVyaWFsaXplZCAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pO1xuICAgIH1cbiAgICB2aXNpdENvbW1vblRhYmxlRXhwcmVzc2lvbk5hbWUobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgaWYgKG5vZGUuY29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRBbHRlclRhYmxlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2FsdGVyIHRhYmxlICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgaWYgKG5vZGUucmVuYW1lVG8pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdyZW5hbWUgdG8gJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJlbmFtZVRvKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5zZXRTY2hlbWEpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdzZXQgc2NoZW1hICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5zZXRTY2hlbWEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmFkZENvbnN0cmFpbnQpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuYWRkQ29uc3RyYWludCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZHJvcENvbnN0cmFpbnQpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZHJvcENvbnN0cmFpbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnJlbmFtZUNvbnN0cmFpbnQpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmVuYW1lQ29uc3RyYWludCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuY29sdW1uQWx0ZXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUNvbHVtbkFsdGVyYXRpb25zKG5vZGUuY29sdW1uQWx0ZXJhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmFkZEluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmFkZEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kcm9wSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZHJvcEluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdEFkZENvbHVtbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdhZGQgY29sdW1uICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgfVxuICAgIHZpc2l0UmVuYW1lQ29sdW1uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3JlbmFtZSBjb2x1bW4gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyB0byAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZW5hbWVUbyk7XG4gICAgfVxuICAgIHZpc2l0RHJvcENvbHVtbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkcm9wIGNvbHVtbiAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2x1bW4pO1xuICAgIH1cbiAgICB2aXNpdEFsdGVyQ29sdW1uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2FsdGVyIGNvbHVtbiAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2x1bW4pO1xuICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICBpZiAobm9kZS5kYXRhVHlwZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYW5ub3VuY2VzTmV3Q29sdW1uRGF0YVR5cGUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCd0eXBlICcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5kYXRhVHlwZSk7XG4gICAgICAgICAgICBpZiAobm9kZS5kYXRhVHlwZUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgndXNpbmcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5kYXRhVHlwZUV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnNldERlZmF1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdzZXQgZGVmYXVsdCAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuc2V0RGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZHJvcERlZmF1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdkcm9wIGRlZmF1bHQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5zZXROb3ROdWxsKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnc2V0IG5vdCBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZHJvcE5vdE51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdkcm9wIG5vdCBudWxsJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRNb2RpZnlDb2x1bW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnbW9kaWZ5IGNvbHVtbiAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2x1bW4pO1xuICAgIH1cbiAgICB2aXNpdEFkZENvbnN0cmFpbnQobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnYWRkICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbnN0cmFpbnQpO1xuICAgIH1cbiAgICB2aXNpdERyb3BDb25zdHJhaW50KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3AgY29uc3RyYWludCAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb25zdHJhaW50TmFtZSk7XG4gICAgICAgIGlmIChub2RlLm1vZGlmaWVyID09PSAnY2FzY2FkZScpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgY2FzY2FkZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vZGUubW9kaWZpZXIgPT09ICdyZXN0cmljdCcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgcmVzdHJpY3QnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFJlbmFtZUNvbnN0cmFpbnQobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgncmVuYW1lIGNvbnN0cmFpbnQgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub2xkTmFtZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgdG8gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmV3TmFtZSk7XG4gICAgfVxuICAgIHZpc2l0U2V0T3BlcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5vcGVyYXRvcik7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIGlmIChub2RlLmFsbCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2FsbCAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pO1xuICAgIH1cbiAgICB2aXNpdENyZWF0ZVZpZXcobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnY3JlYXRlICcpO1xuICAgICAgICBpZiAobm9kZS5vclJlcGxhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdvciByZXBsYWNlICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm1hdGVyaWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ21hdGVyaWFsaXplZCAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS50ZW1wb3JhcnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCd0ZW1wb3JhcnkgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ3ZpZXcgJyk7XG4gICAgICAgIGlmIChub2RlLmlmTm90RXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgbm90IGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICBpZiAobm9kZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJykgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdhcyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuYXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0UmVmcmVzaE1hdGVyaWFsaXplZFZpZXcobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgncmVmcmVzaCBtYXRlcmlhbGl6ZWQgdmlldyAnKTtcbiAgICAgICAgaWYgKG5vZGUuY29uY3VycmVudGx5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnY29uY3VycmVudGx5ICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIGlmIChub2RlLndpdGhOb0RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgd2l0aCBubyBkYXRhJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHdpdGggZGF0YScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RHJvcFZpZXcobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCAnKTtcbiAgICAgICAgaWYgKG5vZGUubWF0ZXJpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnbWF0ZXJpYWxpemVkICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCd2aWV3ICcpO1xuICAgICAgICBpZiAobm9kZS5pZkV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICBpZiAobm9kZS5jYXNjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGNhc2NhZGUnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdEdlbmVyYXRlZChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdnZW5lcmF0ZWQgJyk7XG4gICAgICAgIGlmIChub2RlLmFsd2F5cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2Fsd2F5cyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5ieURlZmF1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdieSBkZWZhdWx0ICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdhcyAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWRlbnRpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZGVudGl0eScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5zdG9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgc3RvcmVkJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXREZWZhdWx0VmFsdWUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZGVmYXVsdCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5kZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgICB2aXNpdFNlbGVjdE1vZGlmaWVyKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUucmF3TW9kaWZpZXIpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmF3TW9kaWZpZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoU0VMRUNUX01PRElGSUVSX1NRTFtub2RlLm1vZGlmaWVyXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub2YpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb2YgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUub2YsICcsICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0Q3JlYXRlVHlwZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjcmVhdGUgdHlwZSAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgaWYgKG5vZGUuZW51bSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBhcyBlbnVtICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5lbnVtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdERyb3BUeXBlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3AgdHlwZSAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICB9XG4gICAgdmlzaXRFeHBsYWluKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2V4cGxhaW4nKTtcbiAgICAgICAgaWYgKG5vZGUub3B0aW9ucyB8fCBub2RlLmZvcm1hdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuZ2V0TGVmdEV4cGxhaW5PcHRpb25zV3JhcHBlcigpKTtcbiAgICAgICAgICAgIGlmIChub2RlLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLmdldEV4cGxhaW5PcHRpb25zRGVsaW1pdGVyKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLmZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdmb3JtYXQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLmdldEV4cGxhaW5PcHRpb25Bc3NpZ25tZW50KCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5vZGUuZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuZ2V0UmlnaHRFeHBsYWluT3B0aW9uc1dyYXBwZXIoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXREZWZhdWx0SW5zZXJ0VmFsdWUoXykge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZGVmYXVsdCcpO1xuICAgIH1cbiAgICB2aXNpdEFnZ3JlZ2F0ZUZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5mdW5jKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgaWYgKG5vZGUuZGlzdGluY3QpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdkaXN0aW5jdCAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuYWdncmVnYXRlZCk7XG4gICAgICAgIGlmIChub2RlLm9yZGVyQnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9yZGVyQnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIGlmIChub2RlLndpdGhpbkdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHdpdGhpbiBncm91cCAoJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndpdGhpbkdyb3VwKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGZpbHRlcignKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZmlsdGVyKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3Zlcikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3Zlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRPdmVyKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ292ZXIoJyk7XG4gICAgICAgIGlmIChub2RlLnBhcnRpdGlvbkJ5KSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnBhcnRpdGlvbkJ5KTtcbiAgICAgICAgICAgIGlmIChub2RlLm9yZGVyQnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9yZGVyQnkpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3JkZXJCeSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgdmlzaXRQYXJ0aXRpb25CeShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdwYXJ0aXRpb24gYnkgJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5pdGVtcyk7XG4gICAgfVxuICAgIHZpc2l0UGFydGl0aW9uQnlJdGVtKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5wYXJ0aXRpb25CeSk7XG4gICAgfVxuICAgIHZpc2l0QmluYXJ5T3BlcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5sZWZ0T3BlcmFuZCk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3BlcmF0b3IpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJpZ2h0T3BlcmFuZCk7XG4gICAgfVxuICAgIHZpc2l0VW5hcnlPcGVyYXRpb24obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9wZXJhdG9yKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzTWludXNPcGVyYXRvcihub2RlLm9wZXJhdG9yKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9wZXJhbmQpO1xuICAgIH1cbiAgICBpc01pbnVzT3BlcmF0b3Iobm9kZSkge1xuICAgICAgICByZXR1cm4gT3BlcmF0b3JOb2RlLmlzKG5vZGUpICYmIG5vZGUub3BlcmF0b3IgPT09ICctJztcbiAgICB9XG4gICAgdmlzaXRVc2luZyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCd1c2luZyAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnRhYmxlcyk7XG4gICAgfVxuICAgIHZpc2l0RnVuY3Rpb24obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChub2RlLmZ1bmMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgdmlzaXRDYXNlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Nhc2UnKTtcbiAgICAgICAgaWYgKG5vZGUudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aGVuKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLndoZW4sICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZWxzZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBlbHNlICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5lbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnIGVuZCcpO1xuICAgICAgICBpZiAobm9kZS5pc1N0YXRlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBjYXNlJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRXaGVuKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3doZW4gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKG5vZGUucmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHRoZW4gJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRKU09OUmVmZXJlbmNlKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZWZlcmVuY2UpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRyYXZlcnNhbCk7XG4gICAgfVxuICAgIHZpc2l0SlNPTlBhdGgobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5pbk9wZXJhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmluT3BlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKFwiJyRcIik7XG4gICAgICAgIGZvciAoY29uc3QgcGF0aExlZyBvZiBub2RlLnBhdGhMZWdzKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShwYXRoTGVnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZChcIidcIik7XG4gICAgfVxuICAgIHZpc2l0SlNPTlBhdGhMZWcobm9kZSkge1xuICAgICAgICBjb25zdCBpc0FycmF5TG9jYXRpb24gPSBub2RlLnR5cGUgPT09ICdBcnJheUxvY2F0aW9uJztcbiAgICAgICAgdGhpcy5hcHBlbmQoaXNBcnJheUxvY2F0aW9uID8gJ1snIDogJy4nKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoU3RyaW5nKG5vZGUudmFsdWUpKTtcbiAgICAgICAgaWYgKGlzQXJyYXlMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ10nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdEpTT05PcGVyYXRvckNoYWluKG5vZGUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG5vZGUudmFsdWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gbGVuIC0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3BlcmF0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJy0+Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnZhbHVlc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRNZXJnZVF1ZXJ5KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUud2l0aCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aXRoKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ21lcmdlICcpO1xuICAgICAgICBpZiAobm9kZS50b3ApIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudG9wKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ2ludG8gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuaW50byk7XG4gICAgICAgIGlmIChub2RlLnVzaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS51c2luZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2hlbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUud2hlbnMsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucmV0dXJuaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZXR1cm5pbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm91dHB1dCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3V0cHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5lbmRNb2RpZmllcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5lbmRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRNYXRjaGVkKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUubm90KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnbm90ICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdtYXRjaGVkJyk7XG4gICAgICAgIGlmIChub2RlLmJ5U291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGJ5IHNvdXJjZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0QWRkSW5kZXgobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnYWRkICcpO1xuICAgICAgICBpZiAobm9kZS51bmlxdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCd1bmlxdWUgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ2luZGV4ICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICBpZiAobm9kZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICgnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudXNpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgdXNpbmcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnVzaW5nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdENhc3Qobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnY2FzdCgnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyBhcyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5kYXRhVHlwZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgfVxuICAgIHZpc2l0RmV0Y2gobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZmV0Y2ggbmV4dCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yb3dDb3VudCk7XG4gICAgICAgIHRoaXMuYXBwZW5kKGAgcm93cyAke25vZGUubW9kaWZpZXJ9YCk7XG4gICAgfVxuICAgIHZpc2l0T3V0cHV0KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ291dHB1dCAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnNlbGVjdGlvbnMpO1xuICAgIH1cbiAgICB2aXNpdFRvcChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGB0b3AoJHtub2RlLmV4cHJlc3Npb259KWApO1xuICAgICAgICBpZiAobm9kZS5tb2RpZmllcnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKGAgJHtub2RlLm1vZGlmaWVyc31gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE9yQWN0aW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5hY3Rpb24pO1xuICAgIH1cbiAgICB2aXNpdENvbGxhdGUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnY29sbGF0ZSAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2xsYXRpb24pO1xuICAgIH1cbiAgICBhcHBlbmQoc3RyKSB7XG4gICAgICAgIHRoaXMuI3NxbCArPSBzdHI7XG4gICAgfVxuICAgIGFwcGVuZFZhbHVlKHBhcmFtZXRlcikge1xuICAgICAgICB0aGlzLmFkZFBhcmFtZXRlcihwYXJhbWV0ZXIpO1xuICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLmdldEN1cnJlbnRQYXJhbWV0ZXJQbGFjZWhvbGRlcigpKTtcbiAgICB9XG4gICAgZ2V0TGVmdElkZW50aWZpZXJXcmFwcGVyKCkge1xuICAgICAgICByZXR1cm4gJ1wiJztcbiAgICB9XG4gICAgZ2V0UmlnaHRJZGVudGlmaWVyV3JhcHBlcigpIHtcbiAgICAgICAgcmV0dXJuICdcIic7XG4gICAgfVxuICAgIGdldEN1cnJlbnRQYXJhbWV0ZXJQbGFjZWhvbGRlcigpIHtcbiAgICAgICAgcmV0dXJuICckJyArIHRoaXMubnVtUGFyYW1ldGVycztcbiAgICB9XG4gICAgZ2V0TGVmdEV4cGxhaW5PcHRpb25zV3JhcHBlcigpIHtcbiAgICAgICAgcmV0dXJuICcoJztcbiAgICB9XG4gICAgZ2V0RXhwbGFpbk9wdGlvbkFzc2lnbm1lbnQoKSB7XG4gICAgICAgIHJldHVybiAnICc7XG4gICAgfVxuICAgIGdldEV4cGxhaW5PcHRpb25zRGVsaW1pdGVyKCkge1xuICAgICAgICByZXR1cm4gJywgJztcbiAgICB9XG4gICAgZ2V0UmlnaHRFeHBsYWluT3B0aW9uc1dyYXBwZXIoKSB7XG4gICAgICAgIHJldHVybiAnKSc7XG4gICAgfVxuICAgIHNhbml0aXplSWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gICAgICAgIGNvbnN0IGxlZnRXcmFwID0gdGhpcy5nZXRMZWZ0SWRlbnRpZmllcldyYXBwZXIoKTtcbiAgICAgICAgY29uc3QgcmlnaHRXcmFwID0gdGhpcy5nZXRSaWdodElkZW50aWZpZXJXcmFwcGVyKCk7XG4gICAgICAgIGxldCBzYW5pdGl6ZWQgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIGlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHNhbml0aXplZCArPSBjO1xuICAgICAgICAgICAgaWYgKGMgPT09IGxlZnRXcmFwKSB7XG4gICAgICAgICAgICAgICAgc2FuaXRpemVkICs9IGxlZnRXcmFwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gcmlnaHRXcmFwKSB7XG4gICAgICAgICAgICAgICAgc2FuaXRpemVkICs9IHJpZ2h0V3JhcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2FuaXRpemVkO1xuICAgIH1cbiAgICBzYW5pdGl6ZVN0cmluZ0xpdGVyYWwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoTElUX1dSQVBfUkVHRVgsIFwiJydcIik7XG4gICAgfVxuICAgIGFkZFBhcmFtZXRlcihwYXJhbWV0ZXIpIHtcbiAgICAgICAgdGhpcy4jcGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcik7XG4gICAgfVxuICAgIGFwcGVuZEltbWVkaWF0ZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kU3RyaW5nTGl0ZXJhbCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXIodmFsdWUpIHx8IGlzQm9vbGVhbih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzTnVsbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRJbW1lZGlhdGVWYWx1ZSh2YWx1ZS50b0lTT1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0JpZ0ludCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kSW1tZWRpYXRlVmFsdWUodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaW1tZWRpYXRlIHZhbHVlICR7dmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXBwZW5kU3RyaW5nTGl0ZXJhbCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChcIidcIik7XG4gICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuc2FuaXRpemVTdHJpbmdMaXRlcmFsKHZhbHVlKSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKFwiJ1wiKTtcbiAgICB9XG4gICAgc29ydFNlbGVjdE1vZGlmaWVycyhhcnIpIHtcbiAgICAgICAgYXJyLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0Lm1vZGlmaWVyICYmIHJpZ2h0Lm1vZGlmaWVyXG4gICAgICAgICAgICA/IFNFTEVDVF9NT0RJRklFUl9QUklPUklUWVtsZWZ0Lm1vZGlmaWVyXSAtXG4gICAgICAgICAgICAgICAgU0VMRUNUX01PRElGSUVSX1BSSU9SSVRZW3JpZ2h0Lm1vZGlmaWVyXVxuICAgICAgICAgICAgOiAxKTtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZShhcnIpO1xuICAgIH1cbiAgICBjb21waWxlQ29sdW1uQWx0ZXJhdGlvbnMoY29sdW1uQWx0ZXJhdGlvbnMpIHtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChjb2x1bW5BbHRlcmF0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGRpYWxlY3QgYWRkcyBhIFwidHlwZVwiIGtleXdvcmQgYmVmb3JlIGEgY29sdW1uJ3MgbmV3IGRhdGFcbiAgICAgKiB0eXBlIGluIGFuIEFMVEVSIFRBQkxFIHN0YXRlbWVudC5cbiAgICAgKi9cbiAgICBhbm5vdW5jZXNOZXdDb2x1bW5EYXRhVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuY29uc3QgU0VMRUNUX01PRElGSUVSX1NRTCA9IGZyZWV6ZSh7XG4gICAgRm9yS2V5U2hhcmU6ICdmb3Iga2V5IHNoYXJlJyxcbiAgICBGb3JOb0tleVVwZGF0ZTogJ2ZvciBubyBrZXkgdXBkYXRlJyxcbiAgICBGb3JVcGRhdGU6ICdmb3IgdXBkYXRlJyxcbiAgICBGb3JTaGFyZTogJ2ZvciBzaGFyZScsXG4gICAgTm9XYWl0OiAnbm93YWl0JyxcbiAgICBTa2lwTG9ja2VkOiAnc2tpcCBsb2NrZWQnLFxuICAgIERpc3RpbmN0OiAnZGlzdGluY3QnLFxufSk7XG5jb25zdCBTRUxFQ1RfTU9ESUZJRVJfUFJJT1JJVFkgPSBmcmVlemUoe1xuICAgIEZvcktleVNoYXJlOiAxLFxuICAgIEZvck5vS2V5VXBkYXRlOiAxLFxuICAgIEZvclVwZGF0ZTogMSxcbiAgICBGb3JTaGFyZTogMSxcbiAgICBOb1dhaXQ6IDIsXG4gICAgU2tpcExvY2tlZDogMixcbiAgICBEaXN0aW5jdDogMCxcbn0pO1xuY29uc3QgSk9JTl9UWVBFX1NRTCA9IGZyZWV6ZSh7XG4gICAgSW5uZXJKb2luOiAnaW5uZXIgam9pbicsXG4gICAgTGVmdEpvaW46ICdsZWZ0IGpvaW4nLFxuICAgIFJpZ2h0Sm9pbjogJ3JpZ2h0IGpvaW4nLFxuICAgIEZ1bGxKb2luOiAnZnVsbCBqb2luJyxcbiAgICBDcm9zc0pvaW46ICdjcm9zcyBqb2luJyxcbiAgICBMYXRlcmFsSW5uZXJKb2luOiAnaW5uZXIgam9pbiBsYXRlcmFsJyxcbiAgICBMYXRlcmFsTGVmdEpvaW46ICdsZWZ0IGpvaW4gbGF0ZXJhbCcsXG4gICAgTGF0ZXJhbENyb3NzSm9pbjogJ2Nyb3NzIGpvaW4gbGF0ZXJhbCcsXG4gICAgT3V0ZXJBcHBseTogJ291dGVyIGFwcGx5JyxcbiAgICBDcm9zc0FwcGx5OiAnY3Jvc3MgYXBwbHknLFxuICAgIFVzaW5nOiAndXNpbmcnLFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL29wZXJhdGlvbi1ub2RlLXZpc2l0b3IuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgT3BlcmF0aW9uTm9kZVZpc2l0b3Ige1xuICAgIG5vZGVTdGFjayA9IFtdO1xuICAgIGdldCBwYXJlbnROb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlU3RhY2tbdGhpcy5ub2RlU3RhY2subGVuZ3RoIC0gMl07XG4gICAgfVxuICAgICN2aXNpdG9ycyA9IGZyZWV6ZSh7XG4gICAgICAgIEFsaWFzTm9kZTogdGhpcy52aXNpdEFsaWFzLmJpbmQodGhpcyksXG4gICAgICAgIENvbHVtbk5vZGU6IHRoaXMudmlzaXRDb2x1bW4uYmluZCh0aGlzKSxcbiAgICAgICAgSWRlbnRpZmllck5vZGU6IHRoaXMudmlzaXRJZGVudGlmaWVyLmJpbmQodGhpcyksXG4gICAgICAgIFNjaGVtYWJsZUlkZW50aWZpZXJOb2RlOiB0aGlzLnZpc2l0U2NoZW1hYmxlSWRlbnRpZmllci5iaW5kKHRoaXMpLFxuICAgICAgICBSYXdOb2RlOiB0aGlzLnZpc2l0UmF3LmJpbmQodGhpcyksXG4gICAgICAgIFJlZmVyZW5jZU5vZGU6IHRoaXMudmlzaXRSZWZlcmVuY2UuYmluZCh0aGlzKSxcbiAgICAgICAgU2VsZWN0UXVlcnlOb2RlOiB0aGlzLnZpc2l0U2VsZWN0UXVlcnkuYmluZCh0aGlzKSxcbiAgICAgICAgU2VsZWN0aW9uTm9kZTogdGhpcy52aXNpdFNlbGVjdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBUYWJsZU5vZGU6IHRoaXMudmlzaXRUYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICBGcm9tTm9kZTogdGhpcy52aXNpdEZyb20uYmluZCh0aGlzKSxcbiAgICAgICAgU2VsZWN0QWxsTm9kZTogdGhpcy52aXNpdFNlbGVjdEFsbC5iaW5kKHRoaXMpLFxuICAgICAgICBBbmROb2RlOiB0aGlzLnZpc2l0QW5kLmJpbmQodGhpcyksXG4gICAgICAgIE9yTm9kZTogdGhpcy52aXNpdE9yLmJpbmQodGhpcyksXG4gICAgICAgIFZhbHVlTm9kZTogdGhpcy52aXNpdFZhbHVlLmJpbmQodGhpcyksXG4gICAgICAgIFZhbHVlTGlzdE5vZGU6IHRoaXMudmlzaXRWYWx1ZUxpc3QuYmluZCh0aGlzKSxcbiAgICAgICAgUHJpbWl0aXZlVmFsdWVMaXN0Tm9kZTogdGhpcy52aXNpdFByaW1pdGl2ZVZhbHVlTGlzdC5iaW5kKHRoaXMpLFxuICAgICAgICBQYXJlbnNOb2RlOiB0aGlzLnZpc2l0UGFyZW5zLmJpbmQodGhpcyksXG4gICAgICAgIEpvaW5Ob2RlOiB0aGlzLnZpc2l0Sm9pbi5iaW5kKHRoaXMpLFxuICAgICAgICBPcGVyYXRvck5vZGU6IHRoaXMudmlzaXRPcGVyYXRvci5iaW5kKHRoaXMpLFxuICAgICAgICBXaGVyZU5vZGU6IHRoaXMudmlzaXRXaGVyZS5iaW5kKHRoaXMpLFxuICAgICAgICBJbnNlcnRRdWVyeU5vZGU6IHRoaXMudmlzaXRJbnNlcnRRdWVyeS5iaW5kKHRoaXMpLFxuICAgICAgICBEZWxldGVRdWVyeU5vZGU6IHRoaXMudmlzaXREZWxldGVRdWVyeS5iaW5kKHRoaXMpLFxuICAgICAgICBSZXR1cm5pbmdOb2RlOiB0aGlzLnZpc2l0UmV0dXJuaW5nLmJpbmQodGhpcyksXG4gICAgICAgIENyZWF0ZVRhYmxlTm9kZTogdGhpcy52aXNpdENyZWF0ZVRhYmxlLmJpbmQodGhpcyksXG4gICAgICAgIEFkZENvbHVtbk5vZGU6IHRoaXMudmlzaXRBZGRDb2x1bW4uYmluZCh0aGlzKSxcbiAgICAgICAgQ29sdW1uRGVmaW5pdGlvbk5vZGU6IHRoaXMudmlzaXRDb2x1bW5EZWZpbml0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIERyb3BUYWJsZU5vZGU6IHRoaXMudmlzaXREcm9wVGFibGUuYmluZCh0aGlzKSxcbiAgICAgICAgRGF0YVR5cGVOb2RlOiB0aGlzLnZpc2l0RGF0YVR5cGUuYmluZCh0aGlzKSxcbiAgICAgICAgT3JkZXJCeU5vZGU6IHRoaXMudmlzaXRPcmRlckJ5LmJpbmQodGhpcyksXG4gICAgICAgIE9yZGVyQnlJdGVtTm9kZTogdGhpcy52aXNpdE9yZGVyQnlJdGVtLmJpbmQodGhpcyksXG4gICAgICAgIEdyb3VwQnlOb2RlOiB0aGlzLnZpc2l0R3JvdXBCeS5iaW5kKHRoaXMpLFxuICAgICAgICBHcm91cEJ5SXRlbU5vZGU6IHRoaXMudmlzaXRHcm91cEJ5SXRlbS5iaW5kKHRoaXMpLFxuICAgICAgICBVcGRhdGVRdWVyeU5vZGU6IHRoaXMudmlzaXRVcGRhdGVRdWVyeS5iaW5kKHRoaXMpLFxuICAgICAgICBDb2x1bW5VcGRhdGVOb2RlOiB0aGlzLnZpc2l0Q29sdW1uVXBkYXRlLmJpbmQodGhpcyksXG4gICAgICAgIExpbWl0Tm9kZTogdGhpcy52aXNpdExpbWl0LmJpbmQodGhpcyksXG4gICAgICAgIE9mZnNldE5vZGU6IHRoaXMudmlzaXRPZmZzZXQuYmluZCh0aGlzKSxcbiAgICAgICAgT25Db25mbGljdE5vZGU6IHRoaXMudmlzaXRPbkNvbmZsaWN0LmJpbmQodGhpcyksXG4gICAgICAgIE9uRHVwbGljYXRlS2V5Tm9kZTogdGhpcy52aXNpdE9uRHVwbGljYXRlS2V5LmJpbmQodGhpcyksXG4gICAgICAgIENyZWF0ZUluZGV4Tm9kZTogdGhpcy52aXNpdENyZWF0ZUluZGV4LmJpbmQodGhpcyksXG4gICAgICAgIERyb3BJbmRleE5vZGU6IHRoaXMudmlzaXREcm9wSW5kZXguYmluZCh0aGlzKSxcbiAgICAgICAgTGlzdE5vZGU6IHRoaXMudmlzaXRMaXN0LmJpbmQodGhpcyksXG4gICAgICAgIFByaW1hcnlLZXlDb25zdHJhaW50Tm9kZTogdGhpcy52aXNpdFByaW1hcnlLZXlDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIFVuaXF1ZUNvbnN0cmFpbnROb2RlOiB0aGlzLnZpc2l0VW5pcXVlQ29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBSZWZlcmVuY2VzTm9kZTogdGhpcy52aXNpdFJlZmVyZW5jZXMuYmluZCh0aGlzKSxcbiAgICAgICAgQ2hlY2tDb25zdHJhaW50Tm9kZTogdGhpcy52aXNpdENoZWNrQ29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBXaXRoTm9kZTogdGhpcy52aXNpdFdpdGguYmluZCh0aGlzKSxcbiAgICAgICAgQ29tbW9uVGFibGVFeHByZXNzaW9uTm9kZTogdGhpcy52aXNpdENvbW1vblRhYmxlRXhwcmVzc2lvbi5iaW5kKHRoaXMpLFxuICAgICAgICBDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lTm9kZTogdGhpcy52aXNpdENvbW1vblRhYmxlRXhwcmVzc2lvbk5hbWUuYmluZCh0aGlzKSxcbiAgICAgICAgSGF2aW5nTm9kZTogdGhpcy52aXNpdEhhdmluZy5iaW5kKHRoaXMpLFxuICAgICAgICBDcmVhdGVTY2hlbWFOb2RlOiB0aGlzLnZpc2l0Q3JlYXRlU2NoZW1hLmJpbmQodGhpcyksXG4gICAgICAgIERyb3BTY2hlbWFOb2RlOiB0aGlzLnZpc2l0RHJvcFNjaGVtYS5iaW5kKHRoaXMpLFxuICAgICAgICBBbHRlclRhYmxlTm9kZTogdGhpcy52aXNpdEFsdGVyVGFibGUuYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcENvbHVtbk5vZGU6IHRoaXMudmlzaXREcm9wQ29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIFJlbmFtZUNvbHVtbk5vZGU6IHRoaXMudmlzaXRSZW5hbWVDb2x1bW4uYmluZCh0aGlzKSxcbiAgICAgICAgQWx0ZXJDb2x1bW5Ob2RlOiB0aGlzLnZpc2l0QWx0ZXJDb2x1bW4uYmluZCh0aGlzKSxcbiAgICAgICAgTW9kaWZ5Q29sdW1uTm9kZTogdGhpcy52aXNpdE1vZGlmeUNvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBBZGRDb25zdHJhaW50Tm9kZTogdGhpcy52aXNpdEFkZENvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcENvbnN0cmFpbnROb2RlOiB0aGlzLnZpc2l0RHJvcENvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgUmVuYW1lQ29uc3RyYWludE5vZGU6IHRoaXMudmlzaXRSZW5hbWVDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIEZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZTogdGhpcy52aXNpdEZvcmVpZ25LZXlDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIENyZWF0ZVZpZXdOb2RlOiB0aGlzLnZpc2l0Q3JlYXRlVmlldy5iaW5kKHRoaXMpLFxuICAgICAgICBSZWZyZXNoTWF0ZXJpYWxpemVkVmlld05vZGU6IHRoaXMudmlzaXRSZWZyZXNoTWF0ZXJpYWxpemVkVmlldy5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wVmlld05vZGU6IHRoaXMudmlzaXREcm9wVmlldy5iaW5kKHRoaXMpLFxuICAgICAgICBHZW5lcmF0ZWROb2RlOiB0aGlzLnZpc2l0R2VuZXJhdGVkLmJpbmQodGhpcyksXG4gICAgICAgIERlZmF1bHRWYWx1ZU5vZGU6IHRoaXMudmlzaXREZWZhdWx0VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgICAgT25Ob2RlOiB0aGlzLnZpc2l0T24uYmluZCh0aGlzKSxcbiAgICAgICAgVmFsdWVzTm9kZTogdGhpcy52aXNpdFZhbHVlcy5iaW5kKHRoaXMpLFxuICAgICAgICBTZWxlY3RNb2RpZmllck5vZGU6IHRoaXMudmlzaXRTZWxlY3RNb2RpZmllci5iaW5kKHRoaXMpLFxuICAgICAgICBDcmVhdGVUeXBlTm9kZTogdGhpcy52aXNpdENyZWF0ZVR5cGUuYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcFR5cGVOb2RlOiB0aGlzLnZpc2l0RHJvcFR5cGUuYmluZCh0aGlzKSxcbiAgICAgICAgRXhwbGFpbk5vZGU6IHRoaXMudmlzaXRFeHBsYWluLmJpbmQodGhpcyksXG4gICAgICAgIERlZmF1bHRJbnNlcnRWYWx1ZU5vZGU6IHRoaXMudmlzaXREZWZhdWx0SW5zZXJ0VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgICAgQWdncmVnYXRlRnVuY3Rpb25Ob2RlOiB0aGlzLnZpc2l0QWdncmVnYXRlRnVuY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgT3Zlck5vZGU6IHRoaXMudmlzaXRPdmVyLmJpbmQodGhpcyksXG4gICAgICAgIFBhcnRpdGlvbkJ5Tm9kZTogdGhpcy52aXNpdFBhcnRpdGlvbkJ5LmJpbmQodGhpcyksXG4gICAgICAgIFBhcnRpdGlvbkJ5SXRlbU5vZGU6IHRoaXMudmlzaXRQYXJ0aXRpb25CeUl0ZW0uYmluZCh0aGlzKSxcbiAgICAgICAgU2V0T3BlcmF0aW9uTm9kZTogdGhpcy52aXNpdFNldE9wZXJhdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBCaW5hcnlPcGVyYXRpb25Ob2RlOiB0aGlzLnZpc2l0QmluYXJ5T3BlcmF0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIFVuYXJ5T3BlcmF0aW9uTm9kZTogdGhpcy52aXNpdFVuYXJ5T3BlcmF0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIFVzaW5nTm9kZTogdGhpcy52aXNpdFVzaW5nLmJpbmQodGhpcyksXG4gICAgICAgIEZ1bmN0aW9uTm9kZTogdGhpcy52aXNpdEZ1bmN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIENhc2VOb2RlOiB0aGlzLnZpc2l0Q2FzZS5iaW5kKHRoaXMpLFxuICAgICAgICBXaGVuTm9kZTogdGhpcy52aXNpdFdoZW4uYmluZCh0aGlzKSxcbiAgICAgICAgSlNPTlJlZmVyZW5jZU5vZGU6IHRoaXMudmlzaXRKU09OUmVmZXJlbmNlLmJpbmQodGhpcyksXG4gICAgICAgIEpTT05QYXRoTm9kZTogdGhpcy52aXNpdEpTT05QYXRoLmJpbmQodGhpcyksXG4gICAgICAgIEpTT05QYXRoTGVnTm9kZTogdGhpcy52aXNpdEpTT05QYXRoTGVnLmJpbmQodGhpcyksXG4gICAgICAgIEpTT05PcGVyYXRvckNoYWluTm9kZTogdGhpcy52aXNpdEpTT05PcGVyYXRvckNoYWluLmJpbmQodGhpcyksXG4gICAgICAgIFR1cGxlTm9kZTogdGhpcy52aXNpdFR1cGxlLmJpbmQodGhpcyksXG4gICAgICAgIE1lcmdlUXVlcnlOb2RlOiB0aGlzLnZpc2l0TWVyZ2VRdWVyeS5iaW5kKHRoaXMpLFxuICAgICAgICBNYXRjaGVkTm9kZTogdGhpcy52aXNpdE1hdGNoZWQuYmluZCh0aGlzKSxcbiAgICAgICAgQWRkSW5kZXhOb2RlOiB0aGlzLnZpc2l0QWRkSW5kZXguYmluZCh0aGlzKSxcbiAgICAgICAgQ2FzdE5vZGU6IHRoaXMudmlzaXRDYXN0LmJpbmQodGhpcyksXG4gICAgICAgIEZldGNoTm9kZTogdGhpcy52aXNpdEZldGNoLmJpbmQodGhpcyksXG4gICAgICAgIFRvcE5vZGU6IHRoaXMudmlzaXRUb3AuYmluZCh0aGlzKSxcbiAgICAgICAgT3V0cHV0Tm9kZTogdGhpcy52aXNpdE91dHB1dC5iaW5kKHRoaXMpLFxuICAgICAgICBPckFjdGlvbk5vZGU6IHRoaXMudmlzaXRPckFjdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBDb2xsYXRlTm9kZTogdGhpcy52aXNpdENvbGxhdGUuYmluZCh0aGlzKSxcbiAgICB9KTtcbiAgICB2aXNpdE5vZGUgPSAobm9kZSkgPT4ge1xuICAgICAgICB0aGlzLm5vZGVTdGFjay5wdXNoKG5vZGUpO1xuICAgICAgICB0aGlzLiN2aXNpdG9yc1tub2RlLmtpbmRdKG5vZGUpO1xuICAgICAgICB0aGlzLm5vZGVTdGFjay5wb3AoKTtcbiAgICB9O1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kaWFsZWN0LWFkYXB0ZXItYmFzZS5kLnRzXCIgLz5cbi8qKlxuICogQSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBgRGlhbGVjdEFkYXB0ZXJgIHdpdGggc2Vuc2libGUgZGVmYXVsdCB2YWx1ZXMuXG4gKiBUaGlyZC1wYXJ0eSBkaWFsZWN0cyBjYW4gZXh0ZW5kIHRoaXMgaW5zdGVhZCBvZiBpbXBsZW1lbnRpbmcgdGhlIGBEaWFsZWN0QWRhcHRlcmBcbiAqIGludGVyZmFjZSBmcm9tIHNjcmF0Y2guIFRoYXQgd2F5IGFsbCBuZXcgc2V0dGluZ3Mgd2lsbCBnZXQgZGVmYXVsdCB2YWx1ZXMgd2hlblxuICogdGhleSBhcmUgYWRkZWQgYW5kIHRoZXJlIHdpbGwgYmUgbGVzcyBicmVha2luZyBjaGFuZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgRGlhbGVjdEFkYXB0ZXJCYXNlIHtcbiAgICBnZXQgc3VwcG9ydHNDcmVhdGVJZk5vdEV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBzdXBwb3J0c1RyYW5zYWN0aW9uYWxEZGwoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IHN1cHBvcnRzUmV0dXJuaW5nKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldCBzdXBwb3J0c091dHB1dCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcG9zdGdyZXMtcXVlcnktY29tcGlsZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBEZWZhdWx0UXVlcnlDb21waWxlciB9IGZyb20gJy4uLy4uL3F1ZXJ5LWNvbXBpbGVyL2RlZmF1bHQtcXVlcnktY29tcGlsZXIuanMnO1xuY29uc3QgSURfV1JBUF9SRUdFWCA9IC9cIi9nO1xuZXhwb3J0IGNsYXNzIFBvc3RncmVzUXVlcnlDb21waWxlciBleHRlbmRzIERlZmF1bHRRdWVyeUNvbXBpbGVyIHtcbiAgICBzYW5pdGl6ZUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gaWRlbnRpZmllci5yZXBsYWNlKElEX1dSQVBfUkVHRVgsICdcIlwiJyk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9wb3N0Z3Jlcy1hZGFwdGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgc3FsIH0gZnJvbSAnLi4vLi4vcmF3LWJ1aWxkZXIvc3FsLmpzJztcbmltcG9ydCB7IERpYWxlY3RBZGFwdGVyQmFzZSB9IGZyb20gJy4uL2RpYWxlY3QtYWRhcHRlci1iYXNlLmpzJztcbi8vIFJhbmRvbSBpZCBmb3Igb3VyIHRyYW5zYWN0aW9uIGxvY2suXG5jb25zdCBMT0NLX0lEID0gQmlnSW50KCczODUzMzE0NzkxMDYyMzA5MTA3Jyk7XG5leHBvcnQgY2xhc3MgUG9zdGdyZXNBZGFwdGVyIGV4dGVuZHMgRGlhbGVjdEFkYXB0ZXJCYXNlIHtcbiAgICBnZXQgc3VwcG9ydHNUcmFuc2FjdGlvbmFsRGRsKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IHN1cHBvcnRzUmV0dXJuaW5nKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYXN5bmMgYWNxdWlyZU1pZ3JhdGlvbkxvY2soZGIsIF9vcHQpIHtcbiAgICAgICAgLy8gQWNxdWlyZSBhIHRyYW5zYWN0aW9uIGxldmVsIGFkdmlzb3J5IGxvY2suXG4gICAgICAgIGF3YWl0IHNxbCBgc2VsZWN0IHBnX2Fkdmlzb3J5X3hhY3RfbG9jaygke3NxbC5saXQoTE9DS19JRCl9KWAuZXhlY3V0ZShkYik7XG4gICAgfVxuICAgIGFzeW5jIHJlbGVhc2VNaWdyYXRpb25Mb2NrKF9kYiwgX29wdCkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIGBwZ19hZHZpc29yeV94YWN0X2xvY2tgIGlzIGF1dG9tYXRpY2FsbHkgcmVsZWFzZWQgYXQgdGhlXG4gICAgICAgIC8vIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24gYW5kIHNpbmNlIGBzdXBwb3J0c1RyYW5zYWN0aW9uYWxEZGxgIHRydWUsIHdlIGtub3dcbiAgICAgICAgLy8gdGhlIGBkYmAgaW5zdGFuY2UgcGFzc2VkIHRvIGFjcXVpcmVNaWdyYXRpb25Mb2NrIGlzIGFjdHVhbGx5IGEgdHJhbnNhY3Rpb24uXG4gICAgfVxufVxuIiwgImltcG9ydCB7IHR5cGUgS3lzZWx5LCBQb3N0Z3Jlc0FkYXB0ZXIsIFBvc3RncmVzUXVlcnlDb21waWxlciB9IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBnZXRCdWlsZGVyIH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9zdGdyZVNRTEJ1aWxkZXI8RGF0YWJhc2UgPSBhbnk+KFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKTogS3lzZWx5PERhdGFiYXNlPiB7XG4gIHJldHVybiBnZXRCdWlsZGVyKHsgLi4ucmVxdWlyZW1lbnRzLCBBZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXIsIFF1ZXJ5Q29tcGlsZXI6IFBvc3RncmVzUXVlcnlDb21waWxlciB9KTtcbn1cbiIsICJpbXBvcnQgeyB0eXBlIFNlbGVjdFF1ZXJ5QnVpbGRlciwgc3FsIH0gZnJvbSBcImt5c2VseVwiO1xuaW1wb3J0IHsganNvbkFycmF5RnJvbSB9IGZyb20gXCJreXNlbHkvaGVscGVycy9wb3N0Z3Jlc1wiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGNvbXBpbGUsIHR5cGUgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB7IGdldFBvc3RncmVTUUxCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlclwiO1xuXG5jb25zdCBSRUdVTEFSX1RBQkxFX0tJTkQgPSBcInJcIjtcbmNvbnN0IFZJRVdfVEFCTEVfS0lORCA9IFwidlwiO1xuY29uc3QgVEFCTEVfS0lORFMgPSBbUkVHVUxBUl9UQUJMRV9LSU5ELCBWSUVXX1RBQkxFX0tJTkRdIGFzIGNvbnN0O1xudHlwZSBUYWJsZUtpbmQgPSAodHlwZW9mIFRBQkxFX0tJTkRTKVtudW1iZXJdO1xuXG5pbnRlcmZhY2UgRGF0YWJhc2Uge1xuICAvKiogY29sdW1ucyAqL1xuICBcInBnX2NhdGFsb2cucGdfYXR0cmlidXRlXCI6IHtcbiAgICAvKiogY29sdW1uIG9yZGVyIG51bWJlciBpbiBpdHMgdGFibGUgKi9cbiAgICBhdHRudW06IG51bWJlcjtcbiAgICAvKiogdGFibGUvdmlldyBpZGVudGlmaWVyICovXG4gICAgYXR0cmVsaWQ6IHN0cmluZztcbiAgICAvKiogY29sdW1uIG5hbWUgKi9cbiAgICBhdHRuYW1lOiBzdHJpbmc7XG4gICAgLyoqIHdhcyB0aGUgY29sdW1uIGRyb3BwZWQuIGRyb3BwZWQgY29sdW1ucyBtaWdodCBub3QgYmUgMTAwJSByZW1vdmVkIGltbWVkaWF0ZWx5LiAqL1xuICAgIGF0dGlzZHJvcHBlZDogYm9vbGVhbjtcbiAgICAvKiogY29sdW1uIGRhdGF0eXBlIGlkZW50aWZpZXIgKi9cbiAgICBhdHR0eXBpZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIGdlbmVyYXRpb24gZmxhZyBmb3IgY29tcHV0ZWQgY29sdW1uczpcbiAgICAgKiAnJyAoZW1wdHkpIGZvciByZWd1bGFyIGNvbHVtbnMsXG4gICAgICogJ3MnIGZvciBTVE9SRUQgZ2VuZXJhdGVkIGNvbHVtbnMgKFBvc3RncmVzIEdFTkVSQVRFRCBBTFdBWVMgQVMpLlxuICAgICAqL1xuICAgIGF0dGdlbmVyYXRlZDogXCJcIiB8IFwic1wiO1xuICAgIC8qKiBOT1QgTlVMTCBjb25zdHJhaW50OiB0cnVlIGlmIHRoZSBjb2x1bW4gaGFzIGEgTk9UIE5VTEwgY29uc3RyYWludCAqL1xuICAgIGF0dG5vdG51bGw6IGJvb2xlYW47XG4gIH07XG4gIC8qKiByZXNvdXJjZXMsIGUuZy4gdGFibGVzLCBzZXF1ZW5jZXMsIGV0Yy4gKi9cbiAgXCJwZ19jYXRhbG9nLnBnX2NsYXNzXCI6IHtcbiAgICAvKiogcmVzb3VyY2UgaWQgKi9cbiAgICBvaWQ6IG51bWJlcjtcbiAgICAvKiogcmVzb3VyY2UgbmFtZSAqL1xuICAgIHJlbG5hbWU6IHN0cmluZztcbiAgICAvKiogc2NoZW1hIGlkICovXG4gICAgcmVsbmFtZXNwYWNlOiBudW1iZXI7XG4gICAgLyoqIHJlc291cmNlIGtpbmQ6IHJlZ3VsYXIgdGFibGUsIHZpZXcgKi9cbiAgICByZWxraW5kOiBUYWJsZUtpbmQ7XG4gIH07XG4gIC8qKiBlbnVtIHR5cGVzJyB2YWx1ZXMgKi9cbiAgXCJwZ19jYXRhbG9nLnBnX2VudW1cIjoge1xuICAgIC8qKiBlbnVtIHZhbHVlICovXG4gICAgZW51bWxhYmVsOiBzdHJpbmc7XG4gICAgLyoqIGVudW0ncyB0eXBlIGlkICovXG4gICAgZW51bXR5cGlkOiBudW1iZXI7XG4gIH07XG4gIC8qKiBzY2hlbWFzICovXG4gIFwicGdfY2F0YWxvZy5wZ19uYW1lc3BhY2VcIjoge1xuICAgIC8qKiBzY2hlbWEgbmFtZSAqL1xuICAgIG5zcG5hbWU6IHN0cmluZztcbiAgICAvKiogc2NoZW1hIGlkICovXG4gICAgb2lkOiBudW1iZXI7XG4gIH07XG4gIC8qKiBkYXRhdHlwZXMgKi9cbiAgXCJwZ19jYXRhbG9nLnBnX3R5cGVcIjoge1xuICAgIC8qKiB0eXBlIGlkICovXG4gICAgb2lkOiBudW1iZXI7XG4gICAgLyoqIHR5cGUgbmFtZSAqL1xuICAgIHR5cG5hbWU6IHN0cmluZztcbiAgICAvKiogdHlwZSdzIHNjaGVtYSAoYWthIG5hbWVzcGFjZSkgaWQgKi9cbiAgICB0eXBuYW1lc3BhY2U6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiB0eXBlJ3Mga2luZFxuICAgICAqXG4gICAgICogJ2UnIC0gZW51bSB0eXBlXG4gICAgICovXG4gICAgdHlwdHlwZTogXCJlXCIgfCAoc3RyaW5nICYge30pO1xuICB9O1xuICAvKiogY29uc3RyYWludHMgKi9cbiAgXCJwZ19jYXRhbG9nLnBnX2NvbnN0cmFpbnRcIjoge1xuICAgIC8qKiByZWxhdGlvbiAodGFibGUpIGlkIHdoaWNoIHRoaXMgY29uc3RyYWludCB3YXMgY3JlYXRlZCBmb3IgKi9cbiAgICBjb25yZWxpZDogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIGNvbnN0cmFpbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIGAncCdgIC0gcHJpbWFyeSBrZXkgY29uc3RyYWludC5cbiAgICAgKiBgJ2YnYCAtIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQuXG4gICAgICovXG4gICAgY29udHlwZTogXCJwXCIgfCBcImZcIiB8IChzdHJpbmcgJiB7fSk7XG4gICAgLyoqXG4gICAgICogYW4gb3JkZXJlZCBhcnJheSBvZiBjb2x1bW5zIGluY2x1ZGVkIGluIHRoZSBjb25zdHJhaW50LlxuICAgICAqXG4gICAgICogdGhlIGNvbHVtbnMgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZWlyIG9yZGluYWwgbnVtYmVyIChgYXR0bnVtYCkgaW4gdGhlaXIgcmVsYXRpb24gKHRhYmxlKS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIGAnezEsM30nYCAtIGEgY29uc3RyYWludCB3aXRoIDIgY29sdW1ucywgdGhlIDFzdCAmIDNyZCBpbiB0aGVpciB0YWJsZS5cbiAgICAgKi9cbiAgICBjb25rZXk6IG51bWJlcltdO1xuICAgIC8qKiBpZiBhIGZvcmVpZ24ga2V5LCB0aGUgcmVmZXJlbmNlZCB0YWJsZSAqL1xuICAgIGNvbmZyZWxpZDogbnVtYmVyO1xuICAgIC8qKiBpZiBhIGZvcmVpZ24ga2V5LCB0aGUgcmVmZXJlbmNlZCBjb2x1bW5zICovXG4gICAgY29uZmtleTogbnVtYmVyW107XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgcmV0dXJucyBtZXRhZGF0YSBmb3IgYWxsIHVzZXItZGVmaW5lZCB0YWJsZXMgYW5kIHZpZXdzIGluIHRoZSBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlc1F1ZXJ5KHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4pIHtcbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgZ2V0UG9zdGdyZVNRTEJ1aWxkZXI8RGF0YWJhc2U+KHJlcXVpcmVtZW50cylcbiAgICAgIC5zZWxlY3RGcm9tKFwicGdfY2F0YWxvZy5wZ19jbGFzcyBhcyBjbHNcIilcbiAgICAgIC5pbm5lckpvaW4oXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBhcyBuc1wiLCBcImNscy5yZWxuYW1lc3BhY2VcIiwgXCJucy5vaWRcIilcbiAgICAgIC4kY2FsbChleGNsdWRlU3lzdGVtVGFibGVzKVxuICAgICAgLy8gcmVndWxhciB0YWJsZXMgb3Igdmlld3NcbiAgICAgIC53aGVyZShcImNscy5yZWxraW5kXCIsIFwiaW5cIiwgVEFCTEVfS0lORFMpXG4gICAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAgICBcIm5zLm5zcG5hbWUgYXMgc2NoZW1hXCIsXG4gICAgICAgIFwiY2xzLnJlbG5hbWUgYXMgbmFtZVwiLFxuICAgICAgICBqc29uQXJyYXlGcm9tKFxuICAgICAgICAgIGViXG4gICAgICAgICAgICAuc2VsZWN0RnJvbShcInBnX2NhdGFsb2cucGdfYXR0cmlidXRlIGFzIGF0dFwiKVxuICAgICAgICAgICAgLmlubmVySm9pbihcInBnX2NhdGFsb2cucGdfdHlwZSBhcyB0eXBcIiwgXCJ0eXAub2lkXCIsIFwiYXR0LmF0dHR5cGlkXCIpXG4gICAgICAgICAgICAuaW5uZXJKb2luKFwicGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgYXMgdG5zXCIsIFwidG5zLm9pZFwiLCBcInR5cC50eXBuYW1lc3BhY2VcIilcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfY29uc3RyYWludCBhcyBwa19jb25cIiwgKGpiKSA9PlxuICAgICAgICAgICAgICBqYlxuICAgICAgICAgICAgICAgIC5vbihcInBrX2Nvbi5jb250eXBlXCIsIFwiPVwiLCBcInBcIilcbiAgICAgICAgICAgICAgICAub25SZWYoXCJwa19jb24uY29ucmVsaWRcIiwgXCI9XCIsIFwiY2xzLm9pZFwiKVxuICAgICAgICAgICAgICAgIC5vbigoZWIpID0+IGViKFwiYXR0LmF0dG51bVwiLCBcIj1cIiwgZWIuZm4uYW55KFwicGtfY29uLmNvbmtleVwiKSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19jb25zdHJhaW50IGFzIGZrX2NvblwiLCAoamIpID0+XG4gICAgICAgICAgICAgIGpiXG4gICAgICAgICAgICAgICAgLm9uKFwiZmtfY29uLmNvbnR5cGVcIiwgXCI9XCIsIFwiZlwiKVxuICAgICAgICAgICAgICAgIC5vblJlZihcImZrX2Nvbi5jb25yZWxpZFwiLCBcIj1cIiwgXCJjbHMub2lkXCIpXG4gICAgICAgICAgICAgICAgLm9uKChlYikgPT4gZWIoXCJhdHQuYXR0bnVtXCIsIFwiPVwiLCBlYi5mbi5hbnkoXCJma19jb24uY29ua2V5XCIpKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJwZ19jYXRhbG9nLnBnX2NsYXNzIGFzIGZrX2Nsc1wiLCBcImZrX2Nscy5vaWRcIiwgXCJma19jb24uY29uZnJlbGlkXCIpXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBhcyBma19uc1wiLCBcImZrX25zLm9pZFwiLCBcImZrX2Nscy5yZWxuYW1lc3BhY2VcIilcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfYXR0cmlidXRlIGFzIGZrX2F0dFwiLCAoamIpID0+XG4gICAgICAgICAgICAgIGpiXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwiZmtfYXR0LmF0dHJlbGlkXCIsIFwiPVwiLCBcImZrX2Nscy5vaWRcIilcbiAgICAgICAgICAgICAgICAvLyBVc2UgYSBjYWxsYmFjayBmb3IgdGhlIC5vbigpIGNvbmRpdGlvbiB0byBlbnN1cmUgY29ycmVjdCBjb250ZXh0IGZvciB0eXBlc1xuICAgICAgICAgICAgICAgIC5vbigob25fZWIpID0+IG9uX2ViKFwiZmtfYXR0LmF0dG51bVwiLCBcIj1cIiwgb25fZWIuZm4uYW55KFwiZmtfY29uLmNvbmZrZXlcIikpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC53aGVyZVJlZihcImF0dC5hdHRyZWxpZFwiLCBcIj1cIiwgXCJjbHMub2lkXCIpXG4gICAgICAgICAgICAvLyBleGNsdWRlIHN5c3RlbSBjb2x1bW5zXG4gICAgICAgICAgICAud2hlcmUoXCJhdHQuYXR0bnVtXCIsIFwiPj1cIiwgMClcbiAgICAgICAgICAgIC53aGVyZShcImF0dC5hdHRpc2Ryb3BwZWRcIiwgXCIhPVwiLCB0cnVlKVxuICAgICAgICAgICAgLnNlbGVjdChbXG4gICAgICAgICAgICAgIFwiYXR0LmF0dG5hbWUgYXMgbmFtZVwiLFxuICAgICAgICAgICAgICBcInR5cC50eXBuYW1lIGFzIGRhdGF0eXBlXCIsXG4gICAgICAgICAgICAgIFwidG5zLm5zcG5hbWUgYXMgZGF0YXR5cGVfc2NoZW1hXCIsXG4gICAgICAgICAgICAgIFwiZmtfbnMubnNwbmFtZSBhcyBmb3JlaWduX2tleV9zY2hlbWFcIixcbiAgICAgICAgICAgICAgXCJma19jbHMucmVsbmFtZSBhcyBmb3JlaWduX2tleV90YWJsZVwiLFxuICAgICAgICAgICAgICBcImZrX2F0dC5hdHRuYW1lIGFzIGZvcmVpZ25fa2V5X2NvbHVtblwiLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgICAgICAgIGViKFwicGtfY29uLmNvbmtleVwiLCBcImlzIG5vdFwiLCBudWxsKS4kY2FzdFRvPGJvb2xlYW4+KCkuYXMoXCJwa1wiKSxcbiAgICAgICAgICAgICAgZWIoXCJhdHQuYXR0Z2VuZXJhdGVkXCIsIFwiIT1cIiwgXCJcIikuJGNhc3RUbzxib29sZWFuPigpLmFzKFwiY29tcHV0ZWRcIiksXG4gICAgICAgICAgICAgIGViKFwiYXR0LmF0dG5vdG51bGxcIiwgXCIhPVwiLCB0cnVlKS4kY2FzdFRvPGJvb2xlYW4+KCkuYXMoXCJudWxsYWJsZVwiKSxcbiAgICAgICAgICAgICAgZWIuZm5cbiAgICAgICAgICAgICAgICAuY29hbGVzY2UoXG4gICAgICAgICAgICAgICAgICBlYlxuICAgICAgICAgICAgICAgICAgICAuc2VsZWN0RnJvbShcInBnX2NhdGFsb2cucGdfZW51bSBhcyBlbm1cIilcbiAgICAgICAgICAgICAgICAgICAgLndoZXJlUmVmKFwiZW5tLmVudW10eXBpZFwiLCBcIj1cIiwgXCJ0eXAub2lkXCIpXG4gICAgICAgICAgICAgICAgICAgIC5zZWxlY3QoKGViKSA9PiBlYi5mbi5qc29uQWdnKGViLnJlZihcImVubS5lbnVtbGFiZWxcIikpLmFzKFwib1wiKSksXG4gICAgICAgICAgICAgICAgICBzcWw8c3RyaW5nW10+YCdbXSdgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXMoXCJvcHRpb25zXCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICkuYXMoXCJjb2x1bW5zXCIpLFxuICAgICAgXSksXG4gICk7XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVGFibGVzUXVlcnkoKSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgc2NoZW1hOiBcInpvb1wiLFxuICAgICAgbmFtZTogXCJhbmltYWxzXCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiaW50NFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IHRydWUsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjaGVtYTogXCJwdWJsaWNcIixcbiAgICAgIG5hbWU6IFwidXNlcnNcIixcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJpbnQ0XCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogdHJ1ZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImNyZWF0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiZGVsZXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyb2xlXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidmFyY2hhclwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidmFyY2hhclwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lX3JvbGVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IHRydWUsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgY3VycmVudCB0aW1lem9uZSBzZXR0aW5nIG9mIHRoZSBQb3N0Z3JlU1FMIGRhdGFiYXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXpvbmVRdWVyeSgpIHtcbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyKCk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoYnVpbGRlci5zZWxlY3ROb0Zyb20oYnVpbGRlci5mbjxzdHJpbmc+KFwiY3VycmVudF9zZXR0aW5nXCIsIFtzcWwubGl0KFwidGltZXpvbmVcIildKS5hcyhcInRpbWV6b25lXCIpKSk7XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVGltZXpvbmVRdWVyeSgpIHtcbiAgcmV0dXJuIFt7IHRpbWV6b25lOiBcIlVUQ1wiIH1dIGFzIGNvbnN0IHNhdGlzZmllcyBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGltZXpvbmVRdWVyeT47XG59XG5cbi8qKlxuICogV2UgZG9uJ3Qgd2FudCBQb3N0Z3JlU1FMIGludGVybmFscyBpbiBpbnRyb3NwZWN0aW9uIHJlc3VsdHMuIFRvIGJlIHVzZWQgaW4gYCRjYWxsYC5cbiAqL1xuZnVuY3Rpb24gZXhjbHVkZVN5c3RlbVRhYmxlczxcbiAgVCBleHRlbmRzIFNlbGVjdFF1ZXJ5QnVpbGRlcjxcbiAgICBEYXRhYmFzZSAmIHsgbnM6IERhdGFiYXNlW1wicGdfY2F0YWxvZy5wZ19uYW1lc3BhY2VcIl07IGNsczogRGF0YWJhc2VbXCJwZ19jYXRhbG9nLnBnX2NsYXNzXCJdIH0sXG4gICAgXCJuc1wiIHwgXCJjbHNcIixcbiAgICBvYmplY3RcbiAgPixcbj4ocWI6IFQpOiBUIHtcbiAgcmV0dXJuIHFiLndoZXJlKGBucy5uc3BuYW1lYCwgYCF+YCwgYF5wZ19gKS53aGVyZShgbnMubnNwbmFtZWAsIGAhPWAsIGBpbmZvcm1hdGlvbl9zY2hlbWFgKSBhcyBuZXZlcjtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcG9zdGdyZXMuZC50c1wiIC8+XG5pbXBvcnQgeyBzcWwgfSBmcm9tICcuLi9yYXctYnVpbGRlci9zcWwuanMnO1xuLyoqXG4gKiBBIHBvc3RncmVzIGhlbHBlciBmb3IgYWdncmVnYXRpbmcgYSBzdWJxdWVyeSAob3Igb3RoZXIgZXhwcmVzc2lvbikgaW50byBhIEpTT05CIGFycmF5LlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJzZWxlY3RcIiwgXCJOZXN0ZWQgYXJyYXlcIiwgMTEwKSAtLT5cbiAqXG4gKiBXaGlsZSBreXNlbHkgaXMgbm90IGFuIE9STSBhbmQgaXQgZG9lc24ndCBoYXZlIHRoZSBjb25jZXB0IG9mIHJlbGF0aW9ucywgd2UgZG8gcHJvdmlkZVxuICogaGVscGVycyBmb3IgZmV0Y2hpbmcgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cyBpbiBhIHNpbmdsZSBxdWVyeS4gSW4gdGhpcyBleGFtcGxlIHdlXG4gKiB1c2UgdGhlIGBqc29uQXJyYXlGcm9tYCBoZWxwZXIgdG8gZmV0Y2ggcGVyc29uJ3MgcGV0cyBhbG9uZyB3aXRoIHRoZSBwZXJzb24ncyBpZC5cbiAqXG4gKiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGhlbHBlcnMgdW5kZXIgdGhlIGBreXNlbHkvaGVscGVyc2AgZm9sZGVyLCBpbmNsdWRpbmdcbiAqIGBqc29uQXJyYXlGcm9tYCwgYXJlIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsgd2l0aCB0aGlyZCBwYXJ0eSBkaWFsZWN0cy4gSW4gb3JkZXIgZm9yXG4gKiB0aGVtIHRvIHdvcmssIHRoZSBkaWFsZWN0IG11c3QgYXV0b21hdGljYWxseSBwYXJzZSB0aGUgYGpzb25gIGRhdGEgdHlwZSBpbnRvXG4gKiBKYXZhU2NyaXB0IEpTT04gdmFsdWVzIGxpa2Ugb2JqZWN0cyBhbmQgYXJyYXlzLiBTb21lIGRpYWxlY3RzIG1pZ2h0IHNpbXBseSByZXR1cm5cbiAqIHRoZSBkYXRhIGFzIGEgSlNPTiBzdHJpbmcuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpbiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmBcbiAqIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvcG9zdGdyZXMnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQXJyYXlGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAub3JkZXJCeSgncGV0Lm5hbWUnKVxuICogICAgICkuYXMoJ3BldHMnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCAoXG4gKiAgIHNlbGVjdCBjb2FsZXNjZShqc29uX2FnZyhhZ2cpLCAnW10nKSBmcm9tIChcbiAqICAgICBzZWxlY3QgXCJwZXRcIi5cImlkXCIgYXMgXCJwZXRfaWRcIiwgXCJwZXRcIi5cIm5hbWVcIlxuICogICAgIGZyb20gXCJwZXRcIlxuICogICAgIHdoZXJlIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCJcbiAqICAgICBvcmRlciBieSBcInBldFwiLlwibmFtZVwiXG4gKiAgICkgYXMgYWdnXG4gKiApIGFzIFwicGV0c1wiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkFycmF5RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCBjb2FsZXNjZShqc29uX2FnZyhhZ2cpLCAnW10nKSBmcm9tICR7ZXhwcn0gYXMgYWdnKWA7XG59XG4vKipcbiAqIEEgcG9zdGdyZXMgaGVscGVyIGZvciB0dXJuaW5nIGEgc3VicXVlcnkgKG9yIG90aGVyIGV4cHJlc3Npb24pIGludG8gYSBKU09OIG9iamVjdC5cbiAqXG4gKiBUaGUgc3VicXVlcnkgbXVzdCBvbmx5IHJldHVybiBvbmUgcm93LlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJzZWxlY3RcIiwgXCJOZXN0ZWQgb2JqZWN0XCIsIDEyMCkgLS0+XG4gKlxuICogV2hpbGUga3lzZWx5IGlzIG5vdCBhbiBPUk0gYW5kIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgY29uY2VwdCBvZiByZWxhdGlvbnMsIHdlIGRvIHByb3ZpZGVcbiAqIGhlbHBlcnMgZm9yIGZldGNoaW5nIG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMgaW4gYSBzaW5nbGUgcXVlcnkuIEluIHRoaXMgZXhhbXBsZSB3ZVxuICogdXNlIHRoZSBganNvbk9iamVjdEZyb21gIGhlbHBlciB0byBmZXRjaCBwZXJzb24ncyBmYXZvcml0ZSBwZXQgYWxvbmcgd2l0aCB0aGUgcGVyc29uJ3MgaWQuXG4gKlxuICogUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBoZWxwZXJzIHVuZGVyIHRoZSBga3lzZWx5L2hlbHBlcnNgIGZvbGRlciwgaW5jbHVkaW5nXG4gKiBganNvbk9iamVjdEZyb21gLCBhcmUgbm90IGd1YXJhbnRlZWQgdG8gd29yayB3aXRoIHRoaXJkLXBhcnR5IGRpYWxlY3RzLiBJbiBvcmRlciBmb3JcbiAqIHRoZW0gdG8gd29yaywgdGhlIGRpYWxlY3QgbXVzdCBhdXRvbWF0aWNhbGx5IHBhcnNlIHRoZSBganNvbmAgZGF0YSB0eXBlIGludG9cbiAqIEphdmFTY3JpcHQgSlNPTiB2YWx1ZXMgbGlrZSBvYmplY3RzIGFuZCBhcnJheXMuIFNvbWUgZGlhbGVjdHMgbWlnaHQgc2ltcGx5IHJldHVyblxuICogdGhlIGRhdGEgYXMgYSBKU09OIHN0cmluZy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYFxuICogdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpzb25PYmplY3RGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvcG9zdGdyZXMnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uT2JqZWN0RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLndoZXJlKCdwZXQuaXNfZmF2b3JpdGUnLCAnPScsIHRydWUpXG4gKiAgICAgKS5hcygnZmF2b3JpdGVfcGV0JylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwgKFxuICogICBzZWxlY3QgdG9fanNvbihvYmopIGZyb20gKFxuICogICAgIHNlbGVjdCBcInBldFwiLlwiaWRcIiBhcyBcInBldF9pZFwiLCBcInBldFwiLlwibmFtZVwiXG4gKiAgICAgZnJvbSBcInBldFwiXG4gKiAgICAgd2hlcmUgXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIlxuICogICAgIGFuZCBcInBldFwiLlwiaXNfZmF2b3JpdGVcIiA9ICQxXG4gKiAgICkgYXMgb2JqXG4gKiApIGFzIFwiZmF2b3JpdGVfcGV0XCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uT2JqZWN0RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCB0b19qc29uKG9iaikgZnJvbSAke2V4cHJ9IGFzIG9iailgO1xufVxuLyoqXG4gKiBUaGUgUG9zdGdyZVNRTCBganNvbl9idWlsZF9vYmplY3RgIGZ1bmN0aW9uLlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBmdWxseSB3b3JrIHdpdGggdGhlIGJ1aWx0LWluIGBQb3N0Z3Jlc0RpYWxlY3RgLlxuICogV2hpbGUgdGhlIHByb2R1Y2VkIFNRTCBpcyBjb21wYXRpYmxlIHdpdGggYWxsIFBvc3RncmVTUUwgZGF0YWJhc2VzLCBzb21lIHRoaXJkLXBhcnR5IGRpYWxlY3RzXG4gKiBtYXkgbm90IHBhcnNlIHRoZSBuZXN0ZWQgSlNPTiBpbnRvIG9iamVjdHMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgeyBqc29uQnVpbGRPYmplY3QgfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25CdWlsZE9iamVjdCh7XG4gKiAgICAgICBmaXJzdDogZWIucmVmKCdmaXJzdF9uYW1lJyksXG4gKiAgICAgICBsYXN0OiBlYi5yZWYoJ2xhc3RfbmFtZScpLFxuICogICAgICAgZnVsbDogc3FsPHN0cmluZz5gZmlyc3RfbmFtZSB8fFx1MDBBMCcgJyB8fCBsYXN0X25hbWVgXG4gKiAgICAgfSkuYXMoJ25hbWUnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5uYW1lLmZpcnN0XG4gKiByZXN1bHRbMF0/Lm5hbWUubGFzdFxuICogcmVzdWx0WzBdPy5uYW1lLmZ1bGxcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIGpzb25fYnVpbGRfb2JqZWN0KFxuICogICAnZmlyc3QnLCBmaXJzdF9uYW1lLFxuICogICAnbGFzdCcsIGxhc3RfbmFtZSxcbiAqICAgJ2Z1bGwnLCBmaXJzdF9uYW1lIHx8ICcgJyB8fCBsYXN0X25hbWVcbiAqICkgYXMgXCJuYW1lXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQnVpbGRPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIHNxbCBganNvbl9idWlsZF9vYmplY3QoJHtzcWwuam9pbihPYmplY3Qua2V5cyhvYmopLmZsYXRNYXAoKGspID0+IFtzcWwubGl0KGspLCBvYmpba11dKSl9KWA7XG59XG4vKipcbiAqIFRoZSBQb3N0Z3JlU1FMIGBtZXJnZV9hY3Rpb25gIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaW4gYSBgcmV0dXJuaW5nYCBjbGF1c2UgdG8gZ2V0IHRoZSBhY3Rpb24gdGhhdCB3YXNcbiAqIHBlcmZvcm1lZCBpbiBhIGBtZXJnZUludG9gIHF1ZXJ5LiBUaGUgZnVuY3Rpb24gcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZ1xuICogc3RyaW5nczogYCdJTlNFUlQnYCwgYCdVUERBVEUnYCwgb3IgYCdERUxFVEUnYC5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbWVyZ2VBY3Rpb24gfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAubWVyZ2VJbnRvKCdwZXJzb24gYXMgcCcpXG4gKiAgIC51c2luZygncGVyc29uX2JhY2t1cCBhcyBwYicsICdwLmlkJywgJ3BiLmlkJylcbiAqICAgLndoZW5NYXRjaGVkKClcbiAqICAgLnRoZW5VcGRhdGVTZXQoKHsgcmVmIH0pID0+ICh7XG4gKiAgICAgZmlyc3RfbmFtZTogcmVmKCdwYi5maXJzdF9uYW1lJyksXG4gKiAgICAgdXBkYXRlZF9hdDogcmVmKCdwYi51cGRhdGVkX2F0JykuJGNhc3RUbzxzdHJpbmcgfCBudWxsPigpLFxuICogICB9KSlcbiAqICAgLndoZW5Ob3RNYXRjaGVkKClcbiAqICAgLnRoZW5JbnNlcnRWYWx1ZXMoKHsgcmVmfSkgPT4gKHtcbiAqICAgICBpZDogcmVmKCdwYi5pZCcpLFxuICogICAgIGZpcnN0X25hbWU6IHJlZigncGIuZmlyc3RfbmFtZScpLFxuICogICAgIGNyZWF0ZWRfYXQ6IHJlZigncGIudXBkYXRlZF9hdCcpLFxuICogICAgIHVwZGF0ZWRfYXQ6IHJlZigncGIudXBkYXRlZF9hdCcpLiRjYXN0VG88c3RyaW5nIHwgbnVsbD4oKSxcbiAqICAgfSkpXG4gKiAgIC5yZXR1cm5pbmcoW21lcmdlQWN0aW9uKCkuYXMoJ2FjdGlvbicpLCAncC5pZCcsICdwLnVwZGF0ZWRfYXQnXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXS5hY3Rpb25cbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIG1lcmdlIGludG8gXCJwZXJzb25cIiBhcyBcInBcIlxuICogdXNpbmcgXCJwZXJzb25fYmFja3VwXCIgYXMgXCJwYlwiIG9uIFwicFwiLlwiaWRcIiA9IFwicGJcIi5cImlkXCJcbiAqIHdoZW4gbWF0Y2hlZCB0aGVuIHVwZGF0ZSBzZXRcbiAqICAgXCJmaXJzdF9uYW1lXCIgPSBcInBiXCIuXCJmaXJzdF9uYW1lXCIsXG4gKiAgIFwidXBkYXRlZF9hdFwiID0gXCJwYlwiLlwidXBkYXRlZF9hdFwiOjp0ZXh0XG4gKiB3aGVuIG5vdCBtYXRjaGVkIHRoZW4gaW5zZXJ0IHZhbHVlcyAoXCJpZFwiLCBcImZpcnN0X25hbWVcIiwgXCJjcmVhdGVkX2F0XCIsIFwidXBkYXRlZF9hdFwiKVxuICogdmFsdWVzIChcInBiXCIuXCJpZFwiLCBcInBiXCIuXCJmaXJzdF9uYW1lXCIsIFwicGJcIi5cInVwZGF0ZWRfYXRcIiwgXCJwYlwiLlwidXBkYXRlZF9hdFwiKVxuICogcmV0dXJuaW5nIG1lcmdlX2FjdGlvbigpIGFzIFwiYWN0aW9uXCIsIFwicFwiLlwiaWRcIiwgXCJwXCIuXCJ1cGRhdGVkX2F0XCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBY3Rpb24oKSB7XG4gICAgcmV0dXJuIHNxbCBgbWVyZ2VfYWN0aW9uKClgO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7c1JBQUFBLElDQUFDLElDQUFDLElBNlRPLFNBQVNDLEVBQW1CQyxFQUF1QyxDQUN4RSxHQUFNLENBQUUsTUFBQUMsRUFBTyxNQUFBQyxDQUFNLEVBQUlGLEVBRW5CRyxFQUFlRixFQUVyQixPQUFBRSxFQUFhLE1BQVFELEVBRWQsQ0FBQ0MsQ0FBWSxDQUN0QixDQ3JVQUMsSUFFTyxJQUFNQyxHQUE2RSxDQUN4RixLQUFNLENBQ0osTUFBTyxTQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sU0FDVCxFQUNBLE1BQU8sQ0FDTCxNQUFPLFFBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxRQUNULEVBQ0EsT0FBUSxDQUNOLE1BQU8sUUFDVCxFQUlBLEtBQU0sQ0FDSixNQUFPLFVBQ1QsRUFJQSxTQUFVLENBQ1IsTUFBTyxRQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sUUFDVCxFQUNBLFFBQVMsQ0FDUCxNQUFPLFFBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxRQUNULEVBTUEsS0FBTSxDQUNKLE1BQU8sTUFDVCxFQU1BLFVBQVcsQ0FDVCxNQUFPLFVBQ1QsRUFNQSxZQUFhLENBQ1gsTUFBTyxVQUNULEVBTUEsOEJBQStCLENBQzdCLE1BQU8sVUFDVCxFQU1BLDJCQUE0QixDQUMxQixNQUFPLFVBQ1QsRUFNQSxPQUFRLENBQ04sTUFBTyxNQUNULEVBTUEseUJBQTBCLENBQ3hCLE1BQU8sTUFDVCxFQU1BLHNCQUF1QixDQUNyQixNQUFPLFVBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxRQUNULEVBRUEsS0FBTSxDQUNKLE1BQU8sU0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFNBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxTQUNULEVBQ0EsU0FBVSxDQUNSLE1BQU8sU0FDVCxFQUNBLFFBQVMsQ0FDUCxNQUFPLFNBQ1QsRUFDQSxPQUFRLENBQ04sTUFBTyxTQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sU0FDVCxFQUNBLFFBQVMsQ0FDUCxNQUFPLFNBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxTQUNULEVBQ0EsT0FBUSxDQUNOLE1BQU8sU0FDVCxFQUNBLE9BQVEsQ0FDTixNQUFPLFNBQ1QsRUFDQSxtQkFBb0IsQ0FDbEIsTUFBTyxTQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sTUFDVCxFQUNBLE1BQU8sQ0FDTCxNQUFPLE1BQ1QsQ0FDRixFQ3JKQUMsSUNBQUMsSUFNQSxJQUFNQyxFQUFOLE1BQU1DLENBQWUsQ0FDakJDLEdBQ0EsWUFBWUMsRUFBTyxDQUNmLEtBQUtELEdBQVNFLEVBQU9ELENBQUssQ0FDOUIsQ0FDQSxJQUFJLGdCQUFpQixDQUVyQixDQUNBLElBQUksY0FBZSxDQUNmLE1BQU8sRUFDWCxDQUNBLEdBQUdFLEVBQU8sQ0FDTixPQUFPLElBQUlDLEVBQXNCLEtBQU1ELENBQUssQ0FDaEQsQ0FDQSxTQUFVLENBQ04sT0FBTyxJQUFJSixFQUFlLENBQUUsR0FBRyxLQUFLQyxFQUFPLENBQUMsQ0FDaEQsQ0FDQSxVQUFXLENBQ1AsT0FBTyxJQUFJRCxFQUFlLEtBQUtDLEVBQU0sQ0FDekMsQ0FDQSxXQUFXSyxFQUFRLENBQ2YsT0FBTyxJQUFJTixFQUFlLENBQ3RCLEdBQUcsS0FBS0MsR0FDUixRQUFTLEtBQUtBLEdBQU8sVUFBWSxPQUMzQkUsRUFBTyxDQUFDLEdBQUcsS0FBS0YsR0FBTyxRQUFTSyxDQUFNLENBQUMsRUFDdkNILEVBQU8sQ0FBQ0csQ0FBTSxDQUFDLENBQ3pCLENBQUMsQ0FDTCxDQUNBLGlCQUFrQixDQUNkLE9BQU8sS0FBS0MsR0FBaUIsS0FBS0MsR0FBYSxDQUFDLENBQ3BELENBQ0EsUUFBUUMsRUFBa0IsQ0FDdEIsT0FBTyxLQUFLQyxHQUFTLEtBQUtGLEdBQWFDLENBQWdCLENBQUMsQ0FDNUQsQ0FDQSxNQUFNLFFBQVFBLEVBQWtCLENBQzVCLElBQU1FLEVBQVcsS0FBS0gsR0FBYUMsQ0FBZ0IsRUFDbkQsT0FBT0UsRUFBUyxhQUFhLEtBQUtELEdBQVNDLENBQVEsRUFBRyxLQUFLVixHQUFPLE9BQU8sQ0FDN0UsQ0FDQU8sR0FBYUMsRUFBa0IsQ0FDM0IsSUFBTUUsRUFBV0YsSUFBcUIsT0FDaENBLEVBQWlCLFlBQVksRUFDN0JHLEdBQ04sT0FBTyxLQUFLWCxHQUFPLFVBQVksT0FDekJVLEVBQVMsWUFBWSxLQUFLVixHQUFPLE9BQU8sRUFDeENVLENBQ1YsQ0FDQUosR0FBaUJJLEVBQVUsQ0FDdkIsT0FBT0EsRUFBUyxlQUFlLEtBQUtWLEdBQU8sUUFBUyxLQUFLQSxHQUFPLE9BQU8sQ0FDM0UsQ0FDQVMsR0FBU0MsRUFBVSxDQUNmLE9BQU9BLEVBQVMsYUFBYSxLQUFLSixHQUFpQkksQ0FBUSxFQUFHLEtBQUtWLEdBQU8sT0FBTyxDQUNyRixDQUNKLEVBQ08sU0FBU1ksRUFBaUJYLEVBQU8sQ0FDcEMsT0FBTyxJQUFJSCxFQUFlRyxDQUFLLENBQ25DLENBQ0EsSUFBTUcsRUFBTixLQUE0QixDQUN4QlMsR0FDQUMsR0FDQSxZQUFZQyxFQUFZWixFQUFPLENBQzNCLEtBQUtVLEdBQWNFLEVBQ25CLEtBQUtELEdBQVNYLENBQ2xCLENBQ0EsSUFBSSxZQUFhLENBQ2IsT0FBTyxLQUFLVSxFQUNoQixDQUNBLElBQUksT0FBUSxDQUNSLE9BQU8sS0FBS0MsRUFDaEIsQ0FDQSxJQUFJLFlBQWEsQ0FDYixPQUFPLEtBQUtELEVBQ2hCLENBQ0EsaUJBQWtCLENBQ2QsT0FBT0csRUFBVSxPQUFPLEtBQUtILEdBQVksZ0JBQWdCLEVBQUdJLEVBQXNCLEtBQUtILEVBQU0sRUFDdkYsS0FBS0EsR0FBTyxnQkFBZ0IsRUFDNUJJLEVBQWUsT0FBTyxLQUFLSixFQUFNLENBQUMsQ0FDNUMsQ0FDSixFQ25GQUssSUFVTyxJQUFNQyxFQUFNLE9BQU8sT0FBTyxDQUFDQyxLQUFpQkMsSUFDeENDLEVBQWlCLENBQ3BCLFFBQVNDLEVBQWMsRUFDdkIsUUFBU0MsRUFBUSxPQUFPSixFQUFjQyxHQUFZLElBQUlJLEVBQWMsR0FBSyxDQUFDLENBQUMsQ0FDL0UsQ0FBQyxFQUNGLENBQ0MsSUFBSUMsRUFBaUIsQ0FDakIsT0FBT0osRUFBaUIsQ0FDcEIsUUFBU0MsRUFBYyxFQUN2QixRQUFTQyxFQUFRLGdCQUFnQkcsRUFBcUJELENBQWUsQ0FBQyxDQUMxRSxDQUFDLENBQ0wsRUFDQSxJQUFJRSxFQUFPLENBQ1AsT0FBT04sRUFBaUIsQ0FDcEIsUUFBU0MsRUFBYyxFQUN2QixRQUFTQyxFQUFRLGdCQUFnQkssRUFBcUJELENBQUssQ0FBQyxDQUNoRSxDQUFDLENBQ0wsRUFDQSxNQUFNQSxFQUFPLENBQ1QsT0FBTyxLQUFLLElBQUlBLENBQUssQ0FDekIsRUFDQSxNQUFNRSxFQUFnQixDQUNsQixPQUFPUixFQUFpQixDQUNwQixRQUFTQyxFQUFjLEVBQ3ZCLFFBQVNDLEVBQVEsZ0JBQWdCTyxHQUFXRCxDQUFjLENBQUMsQ0FDL0QsQ0FBQyxDQUNMLEVBQ0EsTUFBTUUsRUFBSyxDQUNQLElBQU1DLEVBQVksSUFBSSxNQUFNRCxFQUFJLE9BQVMsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUNwRCxPQUFBQyxFQUFVLENBQUMsRUFBSSxHQUNmQSxFQUFVQSxFQUFVLE9BQVMsQ0FBQyxFQUFJLEdBQzNCWCxFQUFpQixDQUNwQixRQUFTQyxFQUFjLEVBQ3ZCLFFBQVNDLEVBQVEsT0FBT1MsRUFBV0QsRUFBSSxJQUFJRSxFQUFlLE1BQU0sQ0FBQyxDQUNyRSxDQUFDLENBQ0wsRUFDQSxJQUFJTixFQUFPLENBQ1AsT0FBT04sRUFBaUIsQ0FDcEIsUUFBU0MsRUFBYyxFQUN2QixRQUFTQyxFQUFRLGdCQUFnQlcsRUFBVSxnQkFBZ0JQLENBQUssQ0FBQyxDQUNyRSxDQUFDLENBQ0wsRUFDQSxRQUFRQSxFQUFPLENBQ1gsT0FBTyxLQUFLLElBQUlBLENBQUssQ0FDekIsRUFDQSxJQUFJVCxFQUFLLENBQ0wsT0FBT0csRUFBaUIsQ0FDcEIsUUFBU0MsRUFBYyxFQUN2QixRQUFTQyxFQUFRLGNBQWNMLENBQUcsQ0FDdEMsQ0FBQyxDQUNMLEVBQ0EsS0FBS2lCLEVBQU9DLEVBQVlsQixNQUFVLENBQzlCLElBQU1tQixFQUFRLElBQUksTUFBTSxLQUFLLElBQUksRUFBSUYsRUFBTSxPQUFTLEVBQUcsQ0FBQyxDQUFDLEVBQ25ERyxFQUFNRixFQUFVLGdCQUFnQixFQUN0QyxRQUFTRyxFQUFJLEVBQUdBLEVBQUlKLEVBQU0sT0FBUSxFQUFFSSxFQUNoQ0YsRUFBTSxFQUFJRSxDQUFDLEVBQUlmLEdBQWVXLEVBQU1JLENBQUMsQ0FBQyxFQUNsQ0EsSUFBTUosRUFBTSxPQUFTLElBQ3JCRSxFQUFNLEVBQUlFLEVBQUksQ0FBQyxFQUFJRCxHQUczQixPQUFPakIsRUFBaUIsQ0FDcEIsUUFBU0MsRUFBYyxFQUN2QixRQUFTQyxFQUFRLG1CQUFtQmMsQ0FBSyxDQUM3QyxDQUFDLENBQ0wsQ0FDSixDQUFDLEVBQ0QsU0FBU2IsR0FBZWdCLEVBQU8sQ0FDM0IsT0FBSUMsRUFBc0JELENBQUssRUFDcEJBLEVBQU0sZ0JBQWdCLEVBRTFCWixFQUFxQlksQ0FBSyxDQUNyQyxDQ2pGQUUsSUNBQUMsSUFFTyxJQUFNQyxFQUFOLEtBQTJCLENBQzlCLFVBQVksQ0FBQyxFQUNiLElBQUksWUFBYSxDQUNiLE9BQU8sS0FBSyxVQUFVLEtBQUssVUFBVSxPQUFTLENBQUMsQ0FDbkQsQ0FDQUMsR0FBWUMsRUFBTyxDQUNmLFVBQVcsS0FBSyxXQUFXLEtBQUssSUFBSSxFQUNwQyxXQUFZLEtBQUssWUFBWSxLQUFLLElBQUksRUFDdEMsZUFBZ0IsS0FBSyxnQkFBZ0IsS0FBSyxJQUFJLEVBQzlDLHdCQUF5QixLQUFLLHlCQUF5QixLQUFLLElBQUksRUFDaEUsUUFBUyxLQUFLLFNBQVMsS0FBSyxJQUFJLEVBQ2hDLGNBQWUsS0FBSyxlQUFlLEtBQUssSUFBSSxFQUM1QyxnQkFBaUIsS0FBSyxpQkFBaUIsS0FBSyxJQUFJLEVBQ2hELGNBQWUsS0FBSyxlQUFlLEtBQUssSUFBSSxFQUM1QyxVQUFXLEtBQUssV0FBVyxLQUFLLElBQUksRUFDcEMsU0FBVSxLQUFLLFVBQVUsS0FBSyxJQUFJLEVBQ2xDLGNBQWUsS0FBSyxlQUFlLEtBQUssSUFBSSxFQUM1QyxRQUFTLEtBQUssU0FBUyxLQUFLLElBQUksRUFDaEMsT0FBUSxLQUFLLFFBQVEsS0FBSyxJQUFJLEVBQzlCLFVBQVcsS0FBSyxXQUFXLEtBQUssSUFBSSxFQUNwQyxjQUFlLEtBQUssZUFBZSxLQUFLLElBQUksRUFDNUMsdUJBQXdCLEtBQUssd0JBQXdCLEtBQUssSUFBSSxFQUM5RCxXQUFZLEtBQUssWUFBWSxLQUFLLElBQUksRUFDdEMsU0FBVSxLQUFLLFVBQVUsS0FBSyxJQUFJLEVBQ2xDLGFBQWMsS0FBSyxjQUFjLEtBQUssSUFBSSxFQUMxQyxVQUFXLEtBQUssV0FBVyxLQUFLLElBQUksRUFDcEMsZ0JBQWlCLEtBQUssaUJBQWlCLEtBQUssSUFBSSxFQUNoRCxnQkFBaUIsS0FBSyxpQkFBaUIsS0FBSyxJQUFJLEVBQ2hELGNBQWUsS0FBSyxlQUFlLEtBQUssSUFBSSxFQUM1QyxnQkFBaUIsS0FBSyxpQkFBaUIsS0FBSyxJQUFJLEVBQ2hELGNBQWUsS0FBSyxlQUFlLEtBQUssSUFBSSxFQUM1QyxxQkFBc0IsS0FBSyxzQkFBc0IsS0FBSyxJQUFJLEVBQzFELGNBQWUsS0FBSyxlQUFlLEtBQUssSUFBSSxFQUM1QyxhQUFjLEtBQUssY0FBYyxLQUFLLElBQUksRUFDMUMsWUFBYSxLQUFLLGFBQWEsS0FBSyxJQUFJLEVBQ3hDLGdCQUFpQixLQUFLLGlCQUFpQixLQUFLLElBQUksRUFDaEQsWUFBYSxLQUFLLGFBQWEsS0FBSyxJQUFJLEVBQ3hDLGdCQUFpQixLQUFLLGlCQUFpQixLQUFLLElBQUksRUFDaEQsZ0JBQWlCLEtBQUssaUJBQWlCLEtBQUssSUFBSSxFQUNoRCxpQkFBa0IsS0FBSyxrQkFBa0IsS0FBSyxJQUFJLEVBQ2xELFVBQVcsS0FBSyxXQUFXLEtBQUssSUFBSSxFQUNwQyxXQUFZLEtBQUssWUFBWSxLQUFLLElBQUksRUFDdEMsZUFBZ0IsS0FBSyxnQkFBZ0IsS0FBSyxJQUFJLEVBQzlDLG1CQUFvQixLQUFLLG9CQUFvQixLQUFLLElBQUksRUFDdEQsZ0JBQWlCLEtBQUssaUJBQWlCLEtBQUssSUFBSSxFQUNoRCxjQUFlLEtBQUssZUFBZSxLQUFLLElBQUksRUFDNUMsU0FBVSxLQUFLLFVBQVUsS0FBSyxJQUFJLEVBQ2xDLHlCQUEwQixLQUFLLDBCQUEwQixLQUFLLElBQUksRUFDbEUscUJBQXNCLEtBQUssc0JBQXNCLEtBQUssSUFBSSxFQUMxRCxlQUFnQixLQUFLLGdCQUFnQixLQUFLLElBQUksRUFDOUMsb0JBQXFCLEtBQUsscUJBQXFCLEtBQUssSUFBSSxFQUN4RCxTQUFVLEtBQUssVUFBVSxLQUFLLElBQUksRUFDbEMsMEJBQTJCLEtBQUssMkJBQTJCLEtBQUssSUFBSSxFQUNwRSw4QkFBK0IsS0FBSywrQkFBK0IsS0FBSyxJQUFJLEVBQzVFLFdBQVksS0FBSyxZQUFZLEtBQUssSUFBSSxFQUN0QyxpQkFBa0IsS0FBSyxrQkFBa0IsS0FBSyxJQUFJLEVBQ2xELGVBQWdCLEtBQUssZ0JBQWdCLEtBQUssSUFBSSxFQUM5QyxlQUFnQixLQUFLLGdCQUFnQixLQUFLLElBQUksRUFDOUMsZUFBZ0IsS0FBSyxnQkFBZ0IsS0FBSyxJQUFJLEVBQzlDLGlCQUFrQixLQUFLLGtCQUFrQixLQUFLLElBQUksRUFDbEQsZ0JBQWlCLEtBQUssaUJBQWlCLEtBQUssSUFBSSxFQUNoRCxpQkFBa0IsS0FBSyxrQkFBa0IsS0FBSyxJQUFJLEVBQ2xELGtCQUFtQixLQUFLLG1CQUFtQixLQUFLLElBQUksRUFDcEQsbUJBQW9CLEtBQUssb0JBQW9CLEtBQUssSUFBSSxFQUN0RCxxQkFBc0IsS0FBSyxzQkFBc0IsS0FBSyxJQUFJLEVBQzFELHlCQUEwQixLQUFLLDBCQUEwQixLQUFLLElBQUksRUFDbEUsZUFBZ0IsS0FBSyxnQkFBZ0IsS0FBSyxJQUFJLEVBQzlDLDRCQUE2QixLQUFLLDZCQUE2QixLQUFLLElBQUksRUFDeEUsYUFBYyxLQUFLLGNBQWMsS0FBSyxJQUFJLEVBQzFDLGNBQWUsS0FBSyxlQUFlLEtBQUssSUFBSSxFQUM1QyxpQkFBa0IsS0FBSyxrQkFBa0IsS0FBSyxJQUFJLEVBQ2xELE9BQVEsS0FBSyxRQUFRLEtBQUssSUFBSSxFQUM5QixXQUFZLEtBQUssWUFBWSxLQUFLLElBQUksRUFDdEMsbUJBQW9CLEtBQUssb0JBQW9CLEtBQUssSUFBSSxFQUN0RCxlQUFnQixLQUFLLGdCQUFnQixLQUFLLElBQUksRUFDOUMsYUFBYyxLQUFLLGNBQWMsS0FBSyxJQUFJLEVBQzFDLFlBQWEsS0FBSyxhQUFhLEtBQUssSUFBSSxFQUN4Qyx1QkFBd0IsS0FBSyx3QkFBd0IsS0FBSyxJQUFJLEVBQzlELHNCQUF1QixLQUFLLHVCQUF1QixLQUFLLElBQUksRUFDNUQsU0FBVSxLQUFLLFVBQVUsS0FBSyxJQUFJLEVBQ2xDLGdCQUFpQixLQUFLLGlCQUFpQixLQUFLLElBQUksRUFDaEQsb0JBQXFCLEtBQUsscUJBQXFCLEtBQUssSUFBSSxFQUN4RCxpQkFBa0IsS0FBSyxrQkFBa0IsS0FBSyxJQUFJLEVBQ2xELG9CQUFxQixLQUFLLHFCQUFxQixLQUFLLElBQUksRUFDeEQsbUJBQW9CLEtBQUssb0JBQW9CLEtBQUssSUFBSSxFQUN0RCxVQUFXLEtBQUssV0FBVyxLQUFLLElBQUksRUFDcEMsYUFBYyxLQUFLLGNBQWMsS0FBSyxJQUFJLEVBQzFDLFNBQVUsS0FBSyxVQUFVLEtBQUssSUFBSSxFQUNsQyxTQUFVLEtBQUssVUFBVSxLQUFLLElBQUksRUFDbEMsa0JBQW1CLEtBQUssbUJBQW1CLEtBQUssSUFBSSxFQUNwRCxhQUFjLEtBQUssY0FBYyxLQUFLLElBQUksRUFDMUMsZ0JBQWlCLEtBQUssaUJBQWlCLEtBQUssSUFBSSxFQUNoRCxzQkFBdUIsS0FBSyx1QkFBdUIsS0FBSyxJQUFJLEVBQzVELFVBQVcsS0FBSyxXQUFXLEtBQUssSUFBSSxFQUNwQyxlQUFnQixLQUFLLGdCQUFnQixLQUFLLElBQUksRUFDOUMsWUFBYSxLQUFLLGFBQWEsS0FBSyxJQUFJLEVBQ3hDLGFBQWMsS0FBSyxjQUFjLEtBQUssSUFBSSxFQUMxQyxTQUFVLEtBQUssVUFBVSxLQUFLLElBQUksRUFDbEMsVUFBVyxLQUFLLFdBQVcsS0FBSyxJQUFJLEVBQ3BDLFFBQVMsS0FBSyxTQUFTLEtBQUssSUFBSSxFQUNoQyxXQUFZLEtBQUssWUFBWSxLQUFLLElBQUksRUFDdEMsYUFBYyxLQUFLLGNBQWMsS0FBSyxJQUFJLEVBQzFDLFlBQWEsS0FBSyxhQUFhLEtBQUssSUFBSSxDQUM1QyxDQUFDLEVBQ0QsVUFBYUMsR0FBUyxDQUNsQixLQUFLLFVBQVUsS0FBS0EsQ0FBSSxFQUN4QixLQUFLRixHQUFVRSxFQUFLLElBQUksRUFBRUEsQ0FBSSxFQUM5QixLQUFLLFVBQVUsSUFBSSxDQUN2QixDQUNKLEVEbkdBLElBQU1DLEdBQWlCLEtBQ1ZDLEVBQU4sY0FBbUNDLENBQXFCLENBQzNEQyxHQUFPLEdBQ1BDLEdBQWMsQ0FBQyxFQUNmLElBQUksZUFBZ0IsQ0FDaEIsT0FBTyxLQUFLQSxHQUFZLE1BQzVCLENBQ0EsYUFBYUMsRUFBTUMsRUFBUyxDQUN4QixZQUFLSCxHQUFPLEdBQ1osS0FBS0MsR0FBYyxDQUFDLEVBQ3BCLEtBQUssVUFBVSxPQUFPLEVBQUcsS0FBSyxVQUFVLE1BQU0sRUFDOUMsS0FBSyxVQUFVQyxDQUFJLEVBQ1pFLEVBQU8sQ0FDVixNQUFPRixFQUNQLFFBQUFDLEVBQ0EsSUFBSyxLQUFLLE9BQU8sRUFDakIsV0FBWSxDQUFDLEdBQUcsS0FBS0YsRUFBVyxDQUNwQyxDQUFDLENBQ0wsQ0FDQSxRQUFTLENBQ0wsT0FBTyxLQUFLRCxFQUNoQixDQUNBLGlCQUFpQkUsRUFBTSxDQUNuQixJQUFNRyxFQUFlLEtBQUssYUFBZSxRQUNyQyxDQUFDQyxHQUFXLEdBQUcsS0FBSyxVQUFVLEdBQzlCLENBQUNDLEdBQWdCLEdBQUcsS0FBSyxVQUFVLEdBQ25DLENBQUNDLEVBQWdCLEdBQUcsS0FBSyxVQUFVLEdBQ25DLENBQUNDLEdBQWUsR0FBRyxLQUFLLFVBQVUsR0FDbEMsQ0FBQ0MsR0FBaUIsR0FBRyxLQUFLLFVBQVUsRUFDcEMsS0FBSyxhQUFlLFFBQWFSLEVBQUssVUFDdEMsS0FBSyxVQUFVQSxFQUFLLE9BQU8sRUFDM0IsS0FBSyxPQUFPLEdBQUcsR0FFZkcsR0FDQSxLQUFLLE9BQU8sR0FBRyxFQUVmSCxFQUFLLE9BQ0wsS0FBSyxVQUFVQSxFQUFLLElBQUksRUFDeEIsS0FBSyxPQUFPLEdBQUcsR0FFbkIsS0FBSyxPQUFPLFFBQVEsRUFDaEJBLEVBQUssYUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssa0JBQWtCQSxFQUFLLFVBQVUsR0FFdENBLEVBQUssZ0JBQWdCLFNBQ3JCLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxZQUFZQSxFQUFLLGVBQWdCLEdBQUcsR0FFekNBLEVBQUssTUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxHQUFHLEdBRXZCQSxFQUFLLGFBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFlBQVlBLEVBQUssVUFBVSxHQUVoQ0EsRUFBSyxPQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLElBQUksR0FFeEJBLEVBQUssUUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssWUFBWUEsRUFBSyxNQUFPLEdBQUcsR0FFaENBLEVBQUssUUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxLQUFLLEdBRXpCQSxFQUFLLFVBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssT0FBTyxHQUUzQkEsRUFBSyxTQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLE1BQU0sR0FFMUJBLEVBQUssZ0JBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFlBQVlBLEVBQUssY0FBZSxHQUFHLEdBRXhDQSxFQUFLLFVBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssT0FBTyxHQUUzQkEsRUFBSyxRQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLEtBQUssR0FFekJBLEVBQUssU0FDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxNQUFNLEdBRTFCQSxFQUFLLFFBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssS0FBSyxHQUV6QkEsRUFBSyxjQUFjLFNBQ25CLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxZQUFZLEtBQUssb0JBQW9CLENBQUMsR0FBR0EsRUFBSyxZQUFZLENBQUMsRUFBRyxHQUFHLEdBRXRFRyxHQUNBLEtBQUssT0FBTyxHQUFHLENBRXZCLENBQ0EsVUFBVUgsRUFBTSxDQUNaLEtBQUssT0FBTyxPQUFPLEVBQ25CLEtBQUssWUFBWUEsRUFBSyxLQUFLLENBQy9CLENBQ0EsZUFBZUEsRUFBTSxDQUNqQixLQUFLLFVBQVVBLEVBQUssU0FBUyxDQUNqQyxDQUNBLFlBQVlBLEVBQU0sQ0FDZCxLQUFLLFVBQVVBLEVBQUssTUFBTSxDQUM5QixDQUNBLGtCQUFrQlMsRUFBYSxDQUMzQixLQUFLLE9BQU8sZUFBZSxFQUMzQixLQUFLLFlBQVlBLENBQVcsRUFDNUIsS0FBSyxPQUFPLEdBQUcsQ0FDbkIsQ0FDQSxZQUFZQyxFQUFPQyxFQUFZLEtBQU0sQ0FDakMsSUFBTUMsRUFBWUYsRUFBTSxPQUFTLEVBQ2pDLFFBQVNHLEVBQUksRUFBR0EsR0FBS0QsRUFBV0MsSUFDNUIsS0FBSyxVQUFVSCxFQUFNRyxDQUFDLENBQUMsRUFDbkJBLEVBQUlELEdBQ0osS0FBSyxPQUFPRCxDQUFTLENBR2pDLENBQ0EsV0FBV1gsRUFBTSxDQUNiLEtBQUssT0FBTyxRQUFRLEVBQ3BCLEtBQUssVUFBVUEsRUFBSyxLQUFLLENBQzdCLENBQ0EsWUFBWUEsRUFBTSxDQUNkLEtBQUssT0FBTyxTQUFTLEVBQ3JCLEtBQUssVUFBVUEsRUFBSyxNQUFNLENBQzlCLENBQ0EsaUJBQWlCQSxFQUFNLENBQ25CLElBQU1jLEVBQWdCLEtBQUssVUFBVSxLQUFLQyxFQUFVLEVBQUUsRUFDaERDLEVBQWFGLElBQWtCZCxFQUNqQyxDQUFDZ0IsR0FBY2hCLEVBQUssVUFDcEIsS0FBSyxVQUFVQSxFQUFLLE9BQU8sRUFDM0IsS0FBSyxPQUFPLEdBQUcsR0FFZmdCLEdBQWMsQ0FBQ0MsRUFBZSxHQUFHSCxDQUFhLEdBQzlDLEtBQUssT0FBTyxHQUFHLEVBRWZkLEVBQUssT0FDTCxLQUFLLFVBQVVBLEVBQUssSUFBSSxFQUN4QixLQUFLLE9BQU8sR0FBRyxHQUVuQixLQUFLLE9BQU9BLEVBQUssUUFBVSxVQUFZLFFBQVEsRUFFM0NBLEVBQUssU0FDTGtCLEVBQVEsaUZBQWlGLEVBQ3pGLEtBQUssT0FBTyxTQUFTLEdBRXJCbEIsRUFBSyxXQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLFFBQVEsR0FFNUJBLEVBQUssTUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxHQUFHLEdBRXZCQSxFQUFLLE9BQ0wsS0FBSyxPQUFPLFFBQVEsRUFDcEIsS0FBSyxVQUFVQSxFQUFLLElBQUksR0FFeEJBLEVBQUssVUFDTCxLQUFLLE9BQU8sSUFBSSxFQUNoQixLQUFLLFlBQVlBLEVBQUssT0FBTyxFQUM3QixLQUFLLE9BQU8sR0FBRyxHQUVmQSxFQUFLLFNBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssTUFBTSxHQUUxQkEsRUFBSyxTQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLE1BQU0sR0FFMUJBLEVBQUssZ0JBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLE9BQU8sZ0JBQWdCLEdBRTVCQSxFQUFLLGFBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssVUFBVSxHQUU5QkEsRUFBSyxpQkFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxjQUFjLEdBRWxDQSxFQUFLLFlBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssU0FBUyxHQUU3QmdCLEdBQWMsQ0FBQ0MsRUFBZSxHQUFHSCxDQUFhLEdBQzlDLEtBQUssT0FBTyxHQUFHLEVBRWZkLEVBQUssY0FBYyxTQUNuQixLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssWUFBWUEsRUFBSyxhQUFjLEdBQUcsRUFFL0MsQ0FDQSxZQUFZQSxFQUFNLENBQ2QsS0FBSyxPQUFPLFNBQVMsRUFDckIsS0FBSyxZQUFZQSxFQUFLLE1BQU0sQ0FDaEMsQ0FDQSxpQkFBaUJBLEVBQU0sQ0FDbkIsSUFBTWdCLEVBQWEsS0FBSyxVQUFVLEtBQUtELEVBQVUsRUFBRSxJQUFNZixFQUNyRCxDQUFDZ0IsR0FBY2hCLEVBQUssVUFDcEIsS0FBSyxVQUFVQSxFQUFLLE9BQU8sRUFDM0IsS0FBSyxPQUFPLEdBQUcsR0FFZmdCLEdBQ0EsS0FBSyxPQUFPLEdBQUcsRUFFZmhCLEVBQUssT0FDTCxLQUFLLFVBQVVBLEVBQUssSUFBSSxFQUN4QixLQUFLLE9BQU8sR0FBRyxHQUVuQixLQUFLLE9BQU8sU0FBUyxFQUNqQkEsRUFBSyxNQUNMLEtBQUssVUFBVUEsRUFBSyxHQUFHLEVBQ3ZCLEtBQUssT0FBTyxHQUFHLEdBRW5CLEtBQUssVUFBVUEsRUFBSyxJQUFJLEVBQ3BCQSxFQUFLLFNBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssTUFBTSxHQUUxQkEsRUFBSyxRQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLEtBQUssR0FFekJBLEVBQUssUUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssWUFBWUEsRUFBSyxNQUFPLEdBQUcsR0FFaENBLEVBQUssUUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxLQUFLLEdBRXpCQSxFQUFLLFVBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssT0FBTyxHQUUzQkEsRUFBSyxRQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLEtBQUssR0FFekJBLEVBQUssWUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxTQUFTLEdBRTdCZ0IsR0FDQSxLQUFLLE9BQU8sR0FBRyxFQUVmaEIsRUFBSyxjQUFjLFNBQ25CLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxZQUFZQSxFQUFLLGFBQWMsR0FBRyxFQUUvQyxDQUNBLGVBQWVBLEVBQU0sQ0FDakIsS0FBSyxPQUFPLFlBQVksRUFDeEIsS0FBSyxZQUFZQSxFQUFLLFVBQVUsQ0FDcEMsQ0FDQSxXQUFXQSxFQUFNLENBQ2IsS0FBSyxVQUFVQSxFQUFLLElBQUksRUFDeEIsS0FBSyxPQUFPLE1BQU0sRUFDbEIsS0FBSyxVQUFVQSxFQUFLLEtBQUssQ0FDN0IsQ0FDQSxlQUFlQSxFQUFNLENBQ2JBLEVBQUssUUFDTCxLQUFLLFVBQVVBLEVBQUssS0FBSyxFQUN6QixLQUFLLE9BQU8sR0FBRyxHQUVuQixLQUFLLFVBQVVBLEVBQUssTUFBTSxDQUM5QixDQUNBLGVBQWVtQixFQUFHLENBQ2QsS0FBSyxPQUFPLEdBQUcsQ0FDbkIsQ0FDQSxnQkFBZ0JuQixFQUFNLENBQ2xCLEtBQUssT0FBTyxLQUFLLHlCQUF5QixDQUFDLEVBQzNDLEtBQUssMkJBQTJCQSxDQUFJLEVBQ3BDLEtBQUssT0FBTyxLQUFLLDBCQUEwQixDQUFDLENBQ2hELENBQ0EsMkJBQTJCQSxFQUFNLENBQzdCLEdBQUksQ0FBQ29CLEVBQVNwQixFQUFLLElBQUksRUFDbkIsTUFBTSxJQUFJLE1BQU0sbUVBQW1FLEVBRXZGLEtBQUssT0FBTyxLQUFLLG1CQUFtQkEsRUFBSyxJQUFJLENBQUMsQ0FDbEQsQ0FDQSxTQUFTQSxFQUFNLENBQ1gsS0FBSyxVQUFVQSxFQUFLLElBQUksRUFDeEIsS0FBSyxPQUFPLE9BQU8sRUFDbkIsS0FBSyxVQUFVQSxFQUFLLEtBQUssQ0FDN0IsQ0FDQSxRQUFRQSxFQUFNLENBQ1YsS0FBSyxVQUFVQSxFQUFLLElBQUksRUFDeEIsS0FBSyxPQUFPLE1BQU0sRUFDbEIsS0FBSyxVQUFVQSxFQUFLLEtBQUssQ0FDN0IsQ0FDQSxXQUFXQSxFQUFNLENBQ1RBLEVBQUssVUFDTCxLQUFLLHFCQUFxQkEsRUFBSyxLQUFLLEVBR3BDLEtBQUssWUFBWUEsRUFBSyxLQUFLLENBRW5DLENBQ0EsZUFBZUEsRUFBTSxDQUNqQixLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssWUFBWUEsRUFBSyxNQUFNLEVBQzVCLEtBQUssT0FBTyxHQUFHLENBQ25CLENBQ0EsV0FBV0EsRUFBTSxDQUNiLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxZQUFZQSxFQUFLLE1BQU0sRUFDNUIsS0FBSyxPQUFPLEdBQUcsQ0FDbkIsQ0FDQSx3QkFBd0JBLEVBQU0sQ0FDMUIsS0FBSyxPQUFPLEdBQUcsRUFDZixHQUFNLENBQUUsT0FBQXFCLENBQU8sRUFBSXJCLEVBQ25CLFFBQVNhLEVBQUksRUFBR0EsRUFBSVEsRUFBTyxPQUFRLEVBQUVSLEVBQ2pDLEtBQUssWUFBWVEsRUFBT1IsQ0FBQyxDQUFDLEVBQ3RCQSxJQUFNUSxFQUFPLE9BQVMsR0FDdEIsS0FBSyxPQUFPLElBQUksRUFHeEIsS0FBSyxPQUFPLEdBQUcsQ0FDbkIsQ0FDQSxZQUFZckIsRUFBTSxDQUNkLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLElBQUksRUFDeEIsS0FBSyxPQUFPLEdBQUcsQ0FDbkIsQ0FDQSxVQUFVQSxFQUFNLENBQ1osS0FBSyxPQUFPc0IsR0FBY3RCLEVBQUssUUFBUSxDQUFDLEVBQ3hDLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLEtBQUssRUFDckJBLEVBQUssS0FDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxFQUFFLEVBRTlCLENBQ0EsUUFBUUEsRUFBTSxDQUNWLEtBQUssT0FBTyxLQUFLLEVBQ2pCLEtBQUssVUFBVUEsRUFBSyxFQUFFLENBQzFCLENBQ0EsU0FBU0EsRUFBTSxDQUNYLEdBQU0sQ0FBRSxhQUFBdUIsRUFBYyxXQUFZQyxDQUFPLEVBQUl4QixFQUM3QyxRQUFTYSxFQUFJLEVBQUdBLEVBQUlVLEVBQWEsT0FBUSxFQUFFVixFQUN2QyxLQUFLLE9BQU9VLEVBQWFWLENBQUMsQ0FBQyxFQUN2QlcsRUFBTyxPQUFTWCxHQUNoQixLQUFLLFVBQVVXLEVBQU9YLENBQUMsQ0FBQyxDQUdwQyxDQUNBLGNBQWNiLEVBQU0sQ0FDaEIsS0FBSyxPQUFPQSxFQUFLLFFBQVEsQ0FDN0IsQ0FDQSxXQUFXQSxFQUFNLENBQ2IsS0FBSyxVQUFVQSxFQUFLLEtBQUssQ0FDN0IsQ0FDQSx5QkFBeUJBLEVBQU0sQ0FDdkJBLEVBQUssU0FDTCxLQUFLLFVBQVVBLEVBQUssTUFBTSxFQUMxQixLQUFLLE9BQU8sR0FBRyxHQUVuQixLQUFLLFVBQVVBLEVBQUssVUFBVSxDQUNsQyxDQUNBLGlCQUFpQkEsRUFBTSxDQUNuQixLQUFLLE9BQU8sU0FBUyxFQUNqQkEsRUFBSyxnQkFBa0JBLEVBQUssZUFBZSxPQUFTLElBQ3BELEtBQUssWUFBWUEsRUFBSyxlQUFnQixHQUFHLEVBQ3pDLEtBQUssT0FBTyxHQUFHLEdBRWZBLEVBQUssV0FDTCxLQUFLLE9BQU8sWUFBWSxFQUU1QixLQUFLLE9BQU8sUUFBUSxFQUNoQkEsRUFBSyxhQUNMLEtBQUssT0FBTyxnQkFBZ0IsRUFFaEMsS0FBSyxVQUFVQSxFQUFLLEtBQUssRUFDckJBLEVBQUssYUFDTCxLQUFLLE9BQU8sTUFBTSxFQUNsQixLQUFLLFVBQVVBLEVBQUssV0FBVyxJQUcvQixLQUFLLE9BQU8sSUFBSSxFQUNoQixLQUFLLFlBQVksQ0FBQyxHQUFHQSxFQUFLLFFBQVMsR0FBSUEsRUFBSyxhQUFlLENBQUMsQ0FBRSxDQUFDLEVBQy9ELEtBQUssT0FBTyxHQUFHLEVBQ1hBLEVBQUssV0FDTCxLQUFLLE9BQU8sYUFBYSxFQUN6QixLQUFLLE9BQU9BLEVBQUssUUFBUSxHQUV6QkEsRUFBSyxjQUFnQkEsRUFBSyxhQUFhLE9BQVMsSUFDaEQsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFlBQVlBLEVBQUssYUFBYyxHQUFHLEdBR25ELENBQ0Esc0JBQXNCQSxFQUFNLENBQ3BCQSxFQUFLLGFBQ0wsS0FBSyxPQUFPLGdCQUFnQixFQUVoQyxLQUFLLFVBQVVBLEVBQUssTUFBTSxFQUMxQixLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxRQUFRLEVBQ3hCQSxFQUFLLFVBQ0wsS0FBSyxPQUFPLFdBQVcsRUFFdkJBLEVBQUssZ0JBQWtCQSxFQUFLLGVBQWUsT0FBUyxJQUNwRCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssWUFBWUEsRUFBSyxlQUFnQixHQUFHLEdBRXpDQSxFQUFLLFlBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssU0FBUyxHQUU3QkEsRUFBSyxVQUNMLEtBQUssT0FBTyxXQUFXLEVBRXZCQSxFQUFLLFlBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssU0FBUyxHQUU3QkEsRUFBSyxTQUNMLEtBQUssT0FBTyxXQUFXLEVBRXZCQSxFQUFLLFFBQ0wsS0FBSyxPQUFPLFNBQVMsRUFFckJBLEVBQUssa0JBQ0wsS0FBSyxPQUFPLHFCQUFxQixFQUVqQ0EsRUFBSyxZQUNMLEtBQUssT0FBTyxjQUFjLEVBRTFCQSxFQUFLLGdCQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxPQUFPLEtBQUssaUJBQWlCLENBQUMsR0FFbkNBLEVBQUssYUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxVQUFVLEdBRTlCQSxFQUFLLFFBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssS0FBSyxHQUV6QkEsRUFBSyxjQUFnQkEsRUFBSyxhQUFhLE9BQVMsSUFDaEQsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFlBQVlBLEVBQUssYUFBYyxHQUFHLEVBRS9DLENBQ0Esa0JBQW1CLENBQ2YsTUFBTyxnQkFDWCxDQUNBLGdCQUFnQkEsRUFBTSxDQUNsQixLQUFLLE9BQU8sYUFBYSxFQUN6QixLQUFLLFVBQVVBLEVBQUssS0FBSyxFQUN6QixLQUFLLE9BQU8sSUFBSSxFQUNoQixLQUFLLFlBQVlBLEVBQUssT0FBTyxFQUM3QixLQUFLLE9BQU8sR0FBRyxFQUNYQSxFQUFLLFdBQ0wsS0FBSyxPQUFPLGFBQWEsRUFDekIsS0FBSyxPQUFPQSxFQUFLLFFBQVEsR0FFekJBLEVBQUssV0FDTCxLQUFLLE9BQU8sYUFBYSxFQUN6QixLQUFLLE9BQU9BLEVBQUssUUFBUSxFQUVqQyxDQUNBLGVBQWVBLEVBQU0sQ0FDakIsS0FBSyxPQUFPLGFBQWEsRUFDckJBLEVBQUssVUFDTCxLQUFLLE9BQU8sWUFBWSxFQUU1QixLQUFLLFVBQVVBLEVBQUssS0FBSyxFQUNyQkEsRUFBSyxTQUNMLEtBQUssT0FBTyxVQUFVLENBRTlCLENBQ0EsY0FBY0EsRUFBTSxDQUNoQixLQUFLLE9BQU9BLEVBQUssUUFBUSxDQUM3QixDQUNBLGFBQWFBLEVBQU0sQ0FDZixLQUFLLE9BQU8sV0FBVyxFQUN2QixLQUFLLFlBQVlBLEVBQUssS0FBSyxDQUMvQixDQUNBLGlCQUFpQkEsRUFBTSxDQUNuQixLQUFLLFVBQVVBLEVBQUssT0FBTyxFQUN2QkEsRUFBSyxZQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLFNBQVMsR0FFN0JBLEVBQUssWUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxTQUFTLEdBRTdCQSxFQUFLLFFBQ0wsS0FBSyxPQUFPLFNBQVMsRUFDckIsS0FBSyxPQUFPQSxFQUFLLEtBQUssRUFFOUIsQ0FDQSxhQUFhQSxFQUFNLENBQ2YsS0FBSyxPQUFPLFdBQVcsRUFDdkIsS0FBSyxZQUFZQSxFQUFLLEtBQUssQ0FDL0IsQ0FDQSxpQkFBaUJBLEVBQU0sQ0FDbkIsS0FBSyxVQUFVQSxFQUFLLE9BQU8sQ0FDL0IsQ0FDQSxpQkFBaUJBLEVBQU0sQ0FDbkIsSUFBTWMsRUFBZ0IsS0FBSyxVQUFVLEtBQUtDLEVBQVUsRUFBRSxFQUNoREMsRUFBYUYsSUFBa0JkLEVBaUNyQyxHQWhDSSxDQUFDZ0IsR0FBY2hCLEVBQUssVUFDcEIsS0FBSyxVQUFVQSxFQUFLLE9BQU8sRUFDM0IsS0FBSyxPQUFPLEdBQUcsR0FFZmdCLEdBQWMsQ0FBQ0MsRUFBZSxHQUFHSCxDQUFhLEdBQzlDLEtBQUssT0FBTyxHQUFHLEVBRWZkLEVBQUssT0FDTCxLQUFLLFVBQVVBLEVBQUssSUFBSSxFQUN4QixLQUFLLE9BQU8sR0FBRyxHQUVuQixLQUFLLE9BQU8sU0FBUyxFQUNqQkEsRUFBSyxNQUNMLEtBQUssVUFBVUEsRUFBSyxHQUFHLEVBQ3ZCLEtBQUssT0FBTyxHQUFHLEdBRWZBLEVBQUssUUFDTCxLQUFLLFVBQVVBLEVBQUssS0FBSyxFQUN6QixLQUFLLE9BQU8sR0FBRyxHQUVuQixLQUFLLE9BQU8sTUFBTSxFQUNkQSxFQUFLLFNBQ0wsS0FBSyxZQUFZQSxFQUFLLE9BQU8sRUFFN0JBLEVBQUssU0FDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxNQUFNLEdBRTFCQSxFQUFLLE9BQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssSUFBSSxHQUV4QkEsRUFBSyxNQUFPLENBQ1osR0FBSSxDQUFDQSxFQUFLLEtBQ04sTUFBTSxJQUFJLE1BQU0scU5BQXFOLEVBRXpPLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxZQUFZQSxFQUFLLE1BQU8sR0FBRyxDQUNwQyxDQUNJQSxFQUFLLFFBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssS0FBSyxHQUV6QkEsRUFBSyxVQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLE9BQU8sR0FFM0JBLEVBQUssUUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxLQUFLLEdBRXpCQSxFQUFLLFlBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssU0FBUyxHQUU3QmdCLEdBQWMsQ0FBQ0MsRUFBZSxHQUFHSCxDQUFhLEdBQzlDLEtBQUssT0FBTyxHQUFHLEVBRWZkLEVBQUssY0FBYyxTQUNuQixLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssWUFBWUEsRUFBSyxhQUFjLEdBQUcsRUFFL0MsQ0FDQSxrQkFBa0JBLEVBQU0sQ0FDcEIsS0FBSyxVQUFVQSxFQUFLLE1BQU0sRUFDMUIsS0FBSyxPQUFPLEtBQUssRUFDakIsS0FBSyxVQUFVQSxFQUFLLEtBQUssQ0FDN0IsQ0FDQSxXQUFXQSxFQUFNLENBQ2IsS0FBSyxPQUFPLFFBQVEsRUFDcEIsS0FBSyxVQUFVQSxFQUFLLEtBQUssQ0FDN0IsQ0FDQSxZQUFZQSxFQUFNLENBQ2QsS0FBSyxPQUFPLFNBQVMsRUFDckIsS0FBSyxVQUFVQSxFQUFLLE1BQU0sQ0FDOUIsQ0FDQSxnQkFBZ0JBLEVBQU0sQ0FDbEIsS0FBSyxPQUFPLGFBQWEsRUFDckJBLEVBQUssU0FDTCxLQUFLLE9BQU8sSUFBSSxFQUNoQixLQUFLLFlBQVlBLEVBQUssT0FBTyxFQUM3QixLQUFLLE9BQU8sR0FBRyxHQUVWQSxFQUFLLFlBQ1YsS0FBSyxPQUFPLGlCQUFpQixFQUM3QixLQUFLLFVBQVVBLEVBQUssVUFBVSxHQUV6QkEsRUFBSyxrQkFDVixLQUFLLE9BQU8sSUFBSSxFQUNoQixLQUFLLFVBQVVBLEVBQUssZUFBZSxFQUNuQyxLQUFLLE9BQU8sR0FBRyxHQUVmQSxFQUFLLGFBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssVUFBVSxHQUU5QkEsRUFBSyxZQUFjLEdBQ25CLEtBQUssT0FBTyxhQUFhLEVBRXBCQSxFQUFLLFVBQ1YsS0FBSyxPQUFPLGlCQUFpQixFQUM3QixLQUFLLFlBQVlBLEVBQUssT0FBTyxFQUN6QkEsRUFBSyxjQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLFdBQVcsR0FHM0MsQ0FDQSxvQkFBb0JBLEVBQU0sQ0FDdEIsS0FBSyxPQUFPLDBCQUEwQixFQUN0QyxLQUFLLFlBQVlBLEVBQUssT0FBTyxDQUNqQyxDQUNBLGlCQUFpQkEsRUFBTSxDQUNuQixLQUFLLE9BQU8sU0FBUyxFQUNqQkEsRUFBSyxRQUNMLEtBQUssT0FBTyxTQUFTLEVBRXpCLEtBQUssT0FBTyxRQUFRLEVBQ2hCQSxFQUFLLGFBQ0wsS0FBSyxPQUFPLGdCQUFnQixFQUVoQyxLQUFLLFVBQVVBLEVBQUssSUFBSSxFQUNwQkEsRUFBSyxRQUNMLEtBQUssT0FBTyxNQUFNLEVBQ2xCLEtBQUssVUFBVUEsRUFBSyxLQUFLLEdBRXpCQSxFQUFLLFFBQ0wsS0FBSyxPQUFPLFNBQVMsRUFDckIsS0FBSyxVQUFVQSxFQUFLLEtBQUssR0FFekJBLEVBQUssVUFDTCxLQUFLLE9BQU8sSUFBSSxFQUNoQixLQUFLLFlBQVlBLEVBQUssT0FBTyxFQUM3QixLQUFLLE9BQU8sR0FBRyxHQUVmQSxFQUFLLGtCQUNMLEtBQUssT0FBTyxxQkFBcUIsRUFFakNBLEVBQUssUUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxLQUFLLEVBRWpDLENBQ0EsZUFBZUEsRUFBTSxDQUNqQixLQUFLLE9BQU8sYUFBYSxFQUNyQkEsRUFBSyxVQUNMLEtBQUssT0FBTyxZQUFZLEVBRTVCLEtBQUssVUFBVUEsRUFBSyxJQUFJLEVBQ3BCQSxFQUFLLFFBQ0wsS0FBSyxPQUFPLE1BQU0sRUFDbEIsS0FBSyxVQUFVQSxFQUFLLEtBQUssR0FFekJBLEVBQUssU0FDTCxLQUFLLE9BQU8sVUFBVSxDQUU5QixDQUNBLGtCQUFrQkEsRUFBTSxDQUNwQixLQUFLLE9BQU8sZ0JBQWdCLEVBQ3hCQSxFQUFLLGFBQ0wsS0FBSyxPQUFPLGdCQUFnQixFQUVoQyxLQUFLLFVBQVVBLEVBQUssTUFBTSxDQUM5QixDQUNBLGdCQUFnQkEsRUFBTSxDQUNsQixLQUFLLE9BQU8sY0FBYyxFQUN0QkEsRUFBSyxVQUNMLEtBQUssT0FBTyxZQUFZLEVBRTVCLEtBQUssVUFBVUEsRUFBSyxNQUFNLEVBQ3RCQSxFQUFLLFNBQ0wsS0FBSyxPQUFPLFVBQVUsQ0FFOUIsQ0FDQSwwQkFBMEJBLEVBQU0sQ0FDeEJBLEVBQUssT0FDTCxLQUFLLE9BQU8sYUFBYSxFQUN6QixLQUFLLFVBQVVBLEVBQUssSUFBSSxFQUN4QixLQUFLLE9BQU8sR0FBRyxHQUVuQixLQUFLLE9BQU8sZUFBZSxFQUMzQixLQUFLLFlBQVlBLEVBQUssT0FBTyxFQUM3QixLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssZ0JBQWdCQSxDQUFJLENBQzdCLENBQ0EsZ0JBQWdCQSxFQUFNLENBQ2RBLEVBQUssYUFBZSxTQUNoQkEsRUFBSyxXQUNMLEtBQUssT0FBTyxhQUFhLEVBR3pCLEtBQUssT0FBTyxpQkFBaUIsR0FHakNBLEVBQUssb0JBQXNCLFNBQ3ZCQSxFQUFLLGtCQUNMLEtBQUssT0FBTyxxQkFBcUIsRUFHakMsS0FBSyxPQUFPLHNCQUFzQixFQUc5QyxDQUNBLHNCQUFzQkEsRUFBTSxDQUNwQkEsRUFBSyxPQUNMLEtBQUssT0FBTyxhQUFhLEVBQ3pCLEtBQUssVUFBVUEsRUFBSyxJQUFJLEVBQ3hCLEtBQUssT0FBTyxHQUFHLEdBRW5CLEtBQUssT0FBTyxRQUFRLEVBQ2hCQSxFQUFLLGtCQUNMLEtBQUssT0FBTyxxQkFBcUIsRUFFckMsS0FBSyxPQUFPLElBQUksRUFDaEIsS0FBSyxZQUFZQSxFQUFLLE9BQU8sRUFDN0IsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLGdCQUFnQkEsQ0FBSSxDQUM3QixDQUNBLHFCQUFxQkEsRUFBTSxDQUNuQkEsRUFBSyxPQUNMLEtBQUssT0FBTyxhQUFhLEVBQ3pCLEtBQUssVUFBVUEsRUFBSyxJQUFJLEVBQ3hCLEtBQUssT0FBTyxHQUFHLEdBRW5CLEtBQUssT0FBTyxTQUFTLEVBQ3JCLEtBQUssVUFBVUEsRUFBSyxVQUFVLEVBQzlCLEtBQUssT0FBTyxHQUFHLENBQ25CLENBQ0EsMEJBQTBCQSxFQUFNLENBQ3hCQSxFQUFLLE9BQ0wsS0FBSyxPQUFPLGFBQWEsRUFDekIsS0FBSyxVQUFVQSxFQUFLLElBQUksRUFDeEIsS0FBSyxPQUFPLEdBQUcsR0FFbkIsS0FBSyxPQUFPLGVBQWUsRUFDM0IsS0FBSyxZQUFZQSxFQUFLLE9BQU8sRUFDN0IsS0FBSyxPQUFPLElBQUksRUFDaEIsS0FBSyxVQUFVQSxFQUFLLFVBQVUsRUFDMUJBLEVBQUssV0FDTCxLQUFLLE9BQU8sYUFBYSxFQUN6QixLQUFLLE9BQU9BLEVBQUssUUFBUSxHQUV6QkEsRUFBSyxXQUNMLEtBQUssT0FBTyxhQUFhLEVBQ3pCLEtBQUssT0FBT0EsRUFBSyxRQUFRLEdBRTdCLEtBQUssZ0JBQWdCQSxDQUFJLENBQzdCLENBQ0EsVUFBVUEsRUFBTSxDQUNaLEtBQUssWUFBWUEsRUFBSyxLQUFLLENBQy9CLENBQ0EsVUFBVUEsRUFBTSxDQUNaLEtBQUssT0FBTyxPQUFPLEVBQ2ZBLEVBQUssV0FDTCxLQUFLLE9BQU8sWUFBWSxFQUU1QixLQUFLLFlBQVlBLEVBQUssV0FBVyxDQUNyQyxDQUNBLDJCQUEyQkEsRUFBTSxDQUM3QixLQUFLLFVBQVVBLEVBQUssSUFBSSxFQUN4QixLQUFLLE9BQU8sTUFBTSxFQUNkeUIsRUFBVXpCLEVBQUssWUFBWSxJQUN0QkEsRUFBSyxjQUNOLEtBQUssT0FBTyxNQUFNLEVBRXRCLEtBQUssT0FBTyxlQUFlLEdBRS9CLEtBQUssVUFBVUEsRUFBSyxVQUFVLENBQ2xDLENBQ0EsK0JBQStCQSxFQUFNLENBQ2pDLEtBQUssVUFBVUEsRUFBSyxLQUFLLEVBQ3JCQSxFQUFLLFVBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFlBQVlBLEVBQUssT0FBTyxFQUM3QixLQUFLLE9BQU8sR0FBRyxFQUV2QixDQUNBLGdCQUFnQkEsRUFBTSxDQUNsQixLQUFLLE9BQU8sY0FBYyxFQUMxQixLQUFLLFVBQVVBLEVBQUssS0FBSyxFQUN6QixLQUFLLE9BQU8sR0FBRyxFQUNYQSxFQUFLLFdBQ0wsS0FBSyxPQUFPLFlBQVksRUFDeEIsS0FBSyxVQUFVQSxFQUFLLFFBQVEsR0FFNUJBLEVBQUssWUFDTCxLQUFLLE9BQU8sYUFBYSxFQUN6QixLQUFLLFVBQVVBLEVBQUssU0FBUyxHQUU3QkEsRUFBSyxlQUNMLEtBQUssVUFBVUEsRUFBSyxhQUFhLEVBRWpDQSxFQUFLLGdCQUNMLEtBQUssVUFBVUEsRUFBSyxjQUFjLEVBRWxDQSxFQUFLLGtCQUNMLEtBQUssVUFBVUEsRUFBSyxnQkFBZ0IsRUFFcENBLEVBQUssbUJBQ0wsS0FBSyx5QkFBeUJBLEVBQUssaUJBQWlCLEVBRXBEQSxFQUFLLFVBQ0wsS0FBSyxVQUFVQSxFQUFLLFFBQVEsRUFFNUJBLEVBQUssV0FDTCxLQUFLLFVBQVVBLEVBQUssU0FBUyxDQUVyQyxDQUNBLGVBQWVBLEVBQU0sQ0FDakIsS0FBSyxPQUFPLGFBQWEsRUFDekIsS0FBSyxVQUFVQSxFQUFLLE1BQU0sQ0FDOUIsQ0FDQSxrQkFBa0JBLEVBQU0sQ0FDcEIsS0FBSyxPQUFPLGdCQUFnQixFQUM1QixLQUFLLFVBQVVBLEVBQUssTUFBTSxFQUMxQixLQUFLLE9BQU8sTUFBTSxFQUNsQixLQUFLLFVBQVVBLEVBQUssUUFBUSxDQUNoQyxDQUNBLGdCQUFnQkEsRUFBTSxDQUNsQixLQUFLLE9BQU8sY0FBYyxFQUMxQixLQUFLLFVBQVVBLEVBQUssTUFBTSxDQUM5QixDQUNBLGlCQUFpQkEsRUFBTSxDQUNuQixLQUFLLE9BQU8sZUFBZSxFQUMzQixLQUFLLFVBQVVBLEVBQUssTUFBTSxFQUMxQixLQUFLLE9BQU8sR0FBRyxFQUNYQSxFQUFLLFdBQ0QsS0FBSywyQkFBMkIsR0FDaEMsS0FBSyxPQUFPLE9BQU8sRUFFdkIsS0FBSyxVQUFVQSxFQUFLLFFBQVEsRUFDeEJBLEVBQUsscUJBQ0wsS0FBSyxPQUFPLFFBQVEsRUFDcEIsS0FBSyxVQUFVQSxFQUFLLGtCQUFrQixJQUcxQ0EsRUFBSyxhQUNMLEtBQUssT0FBTyxjQUFjLEVBQzFCLEtBQUssVUFBVUEsRUFBSyxVQUFVLEdBRTlCQSxFQUFLLGFBQ0wsS0FBSyxPQUFPLGNBQWMsRUFFMUJBLEVBQUssWUFDTCxLQUFLLE9BQU8sY0FBYyxFQUUxQkEsRUFBSyxhQUNMLEtBQUssT0FBTyxlQUFlLENBRW5DLENBQ0Esa0JBQWtCQSxFQUFNLENBQ3BCLEtBQUssT0FBTyxnQkFBZ0IsRUFDNUIsS0FBSyxVQUFVQSxFQUFLLE1BQU0sQ0FDOUIsQ0FDQSxtQkFBbUJBLEVBQU0sQ0FDckIsS0FBSyxPQUFPLE1BQU0sRUFDbEIsS0FBSyxVQUFVQSxFQUFLLFVBQVUsQ0FDbEMsQ0FDQSxvQkFBb0JBLEVBQU0sQ0FDdEIsS0FBSyxPQUFPLGtCQUFrQixFQUMxQkEsRUFBSyxVQUNMLEtBQUssT0FBTyxZQUFZLEVBRTVCLEtBQUssVUFBVUEsRUFBSyxjQUFjLEVBQzlCQSxFQUFLLFdBQWEsVUFDbEIsS0FBSyxPQUFPLFVBQVUsRUFFakJBLEVBQUssV0FBYSxZQUN2QixLQUFLLE9BQU8sV0FBVyxDQUUvQixDQUNBLHNCQUFzQkEsRUFBTSxDQUN4QixLQUFLLE9BQU8sb0JBQW9CLEVBQ2hDLEtBQUssVUFBVUEsRUFBSyxPQUFPLEVBQzNCLEtBQUssT0FBTyxNQUFNLEVBQ2xCLEtBQUssVUFBVUEsRUFBSyxPQUFPLENBQy9CLENBQ0Esa0JBQWtCQSxFQUFNLENBQ3BCLEtBQUssT0FBT0EsRUFBSyxRQUFRLEVBQ3pCLEtBQUssT0FBTyxHQUFHLEVBQ1hBLEVBQUssS0FDTCxLQUFLLE9BQU8sTUFBTSxFQUV0QixLQUFLLFVBQVVBLEVBQUssVUFBVSxDQUNsQyxDQUNBLGdCQUFnQkEsRUFBTSxDQUNsQixLQUFLLE9BQU8sU0FBUyxFQUNqQkEsRUFBSyxXQUNMLEtBQUssT0FBTyxhQUFhLEVBRXpCQSxFQUFLLGNBQ0wsS0FBSyxPQUFPLGVBQWUsRUFFM0JBLEVBQUssV0FDTCxLQUFLLE9BQU8sWUFBWSxFQUU1QixLQUFLLE9BQU8sT0FBTyxFQUNmQSxFQUFLLGFBQ0wsS0FBSyxPQUFPLGdCQUFnQixFQUVoQyxLQUFLLFVBQVVBLEVBQUssSUFBSSxFQUN4QixLQUFLLE9BQU8sR0FBRyxFQUNYQSxFQUFLLFVBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFlBQVlBLEVBQUssT0FBTyxFQUM3QixLQUFLLE9BQU8sSUFBSSxHQUVoQkEsRUFBSyxLQUNMLEtBQUssT0FBTyxLQUFLLEVBQ2pCLEtBQUssVUFBVUEsRUFBSyxFQUFFLEVBRTlCLENBQ0EsNkJBQTZCQSxFQUFNLENBQy9CLEtBQUssT0FBTyw0QkFBNEIsRUFDcENBLEVBQUssY0FDTCxLQUFLLE9BQU8sZUFBZSxFQUUvQixLQUFLLFVBQVVBLEVBQUssSUFBSSxFQUNwQkEsRUFBSyxXQUNMLEtBQUssT0FBTyxlQUFlLEVBRzNCLEtBQUssT0FBTyxZQUFZLENBRWhDLENBQ0EsY0FBY0EsRUFBTSxDQUNoQixLQUFLLE9BQU8sT0FBTyxFQUNmQSxFQUFLLGNBQ0wsS0FBSyxPQUFPLGVBQWUsRUFFL0IsS0FBSyxPQUFPLE9BQU8sRUFDZkEsRUFBSyxVQUNMLEtBQUssT0FBTyxZQUFZLEVBRTVCLEtBQUssVUFBVUEsRUFBSyxJQUFJLEVBQ3BCQSxFQUFLLFNBQ0wsS0FBSyxPQUFPLFVBQVUsQ0FFOUIsQ0FDQSxlQUFlQSxFQUFNLENBQ2pCLEtBQUssT0FBTyxZQUFZLEVBQ3BCQSxFQUFLLFFBQ0wsS0FBSyxPQUFPLFNBQVMsRUFFckJBLEVBQUssV0FDTCxLQUFLLE9BQU8sYUFBYSxFQUU3QixLQUFLLE9BQU8sS0FBSyxFQUNiQSxFQUFLLFVBQ0wsS0FBSyxPQUFPLFVBQVUsRUFFdEJBLEVBQUssYUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxVQUFVLEVBQzlCLEtBQUssT0FBTyxHQUFHLEdBRWZBLEVBQUssUUFDTCxLQUFLLE9BQU8sU0FBUyxDQUU3QixDQUNBLGtCQUFrQkEsRUFBTSxDQUNwQixLQUFLLE9BQU8sVUFBVSxFQUN0QixLQUFLLFVBQVVBLEVBQUssWUFBWSxDQUNwQyxDQUNBLG9CQUFvQkEsRUFBTSxDQUNsQkEsRUFBSyxZQUNMLEtBQUssVUFBVUEsRUFBSyxXQUFXLEVBRy9CLEtBQUssT0FBTzBCLEdBQW9CMUIsRUFBSyxRQUFRLENBQUMsRUFFOUNBLEVBQUssS0FDTCxLQUFLLE9BQU8sTUFBTSxFQUNsQixLQUFLLFlBQVlBLEVBQUssR0FBSSxJQUFJLEVBRXRDLENBQ0EsZ0JBQWdCQSxFQUFNLENBQ2xCLEtBQUssT0FBTyxjQUFjLEVBQzFCLEtBQUssVUFBVUEsRUFBSyxJQUFJLEVBQ3BCQSxFQUFLLE9BQ0wsS0FBSyxPQUFPLFdBQVcsRUFDdkIsS0FBSyxVQUFVQSxFQUFLLElBQUksRUFFaEMsQ0FDQSxjQUFjQSxFQUFNLENBQ2hCLEtBQUssT0FBTyxZQUFZLEVBQ3BCQSxFQUFLLFVBQ0wsS0FBSyxPQUFPLFlBQVksRUFFNUIsS0FBSyxVQUFVQSxFQUFLLElBQUksQ0FDNUIsQ0FDQSxhQUFhQSxFQUFNLENBQ2YsS0FBSyxPQUFPLFNBQVMsR0FDakJBLEVBQUssU0FBV0EsRUFBSyxVQUNyQixLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssT0FBTyxLQUFLLDZCQUE2QixDQUFDLEVBQzNDQSxFQUFLLFVBQ0wsS0FBSyxVQUFVQSxFQUFLLE9BQU8sRUFDdkJBLEVBQUssUUFDTCxLQUFLLE9BQU8sS0FBSywyQkFBMkIsQ0FBQyxHQUdqREEsRUFBSyxTQUNMLEtBQUssT0FBTyxRQUFRLEVBQ3BCLEtBQUssT0FBTyxLQUFLLDJCQUEyQixDQUFDLEVBQzdDLEtBQUssT0FBT0EsRUFBSyxNQUFNLEdBRTNCLEtBQUssT0FBTyxLQUFLLDhCQUE4QixDQUFDLEVBRXhELENBQ0Esd0JBQXdCbUIsRUFBRyxDQUN2QixLQUFLLE9BQU8sU0FBUyxDQUN6QixDQUNBLHVCQUF1Qm5CLEVBQU0sQ0FDekIsS0FBSyxPQUFPQSxFQUFLLElBQUksRUFDckIsS0FBSyxPQUFPLEdBQUcsRUFDWEEsRUFBSyxVQUNMLEtBQUssT0FBTyxXQUFXLEVBRTNCLEtBQUssWUFBWUEsRUFBSyxVQUFVLEVBQzVCQSxFQUFLLFVBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssT0FBTyxHQUUvQixLQUFLLE9BQU8sR0FBRyxFQUNYQSxFQUFLLGNBQ0wsS0FBSyxPQUFPLGlCQUFpQixFQUM3QixLQUFLLFVBQVVBLEVBQUssV0FBVyxFQUMvQixLQUFLLE9BQU8sR0FBRyxHQUVmQSxFQUFLLFNBQ0wsS0FBSyxPQUFPLFVBQVUsRUFDdEIsS0FBSyxVQUFVQSxFQUFLLE1BQU0sRUFDMUIsS0FBSyxPQUFPLEdBQUcsR0FFZkEsRUFBSyxPQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLElBQUksRUFFaEMsQ0FDQSxVQUFVQSxFQUFNLENBQ1osS0FBSyxPQUFPLE9BQU8sRUFDZkEsRUFBSyxjQUNMLEtBQUssVUFBVUEsRUFBSyxXQUFXLEVBQzNCQSxFQUFLLFNBQ0wsS0FBSyxPQUFPLEdBQUcsR0FHbkJBLEVBQUssU0FDTCxLQUFLLFVBQVVBLEVBQUssT0FBTyxFQUUvQixLQUFLLE9BQU8sR0FBRyxDQUNuQixDQUNBLGlCQUFpQkEsRUFBTSxDQUNuQixLQUFLLE9BQU8sZUFBZSxFQUMzQixLQUFLLFlBQVlBLEVBQUssS0FBSyxDQUMvQixDQUNBLHFCQUFxQkEsRUFBTSxDQUN2QixLQUFLLFVBQVVBLEVBQUssV0FBVyxDQUNuQyxDQUNBLHFCQUFxQkEsRUFBTSxDQUN2QixLQUFLLFVBQVVBLEVBQUssV0FBVyxFQUMvQixLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxRQUFRLEVBQzVCLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLFlBQVksQ0FDcEMsQ0FDQSxvQkFBb0JBLEVBQU0sQ0FDdEIsS0FBSyxVQUFVQSxFQUFLLFFBQVEsRUFDdkIsS0FBSyxnQkFBZ0JBLEVBQUssUUFBUSxHQUNuQyxLQUFLLE9BQU8sR0FBRyxFQUVuQixLQUFLLFVBQVVBLEVBQUssT0FBTyxDQUMvQixDQUNBLGdCQUFnQkEsRUFBTSxDQUNsQixPQUFPMkIsRUFBYSxHQUFHM0IsQ0FBSSxHQUFLQSxFQUFLLFdBQWEsR0FDdEQsQ0FDQSxXQUFXQSxFQUFNLENBQ2IsS0FBSyxPQUFPLFFBQVEsRUFDcEIsS0FBSyxZQUFZQSxFQUFLLE1BQU0sQ0FDaEMsQ0FDQSxjQUFjQSxFQUFNLENBQ2hCLEtBQUssT0FBT0EsRUFBSyxJQUFJLEVBQ3JCLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxZQUFZQSxFQUFLLFNBQVMsRUFDL0IsS0FBSyxPQUFPLEdBQUcsQ0FDbkIsQ0FDQSxVQUFVQSxFQUFNLENBQ1osS0FBSyxPQUFPLE1BQU0sRUFDZEEsRUFBSyxRQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLEtBQUssR0FFekJBLEVBQUssT0FDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssWUFBWUEsRUFBSyxLQUFNLEdBQUcsR0FFL0JBLEVBQUssT0FDTCxLQUFLLE9BQU8sUUFBUSxFQUNwQixLQUFLLFVBQVVBLEVBQUssSUFBSSxHQUU1QixLQUFLLE9BQU8sTUFBTSxFQUNkQSxFQUFLLGFBQ0wsS0FBSyxPQUFPLE9BQU8sQ0FFM0IsQ0FDQSxVQUFVQSxFQUFNLENBQ1osS0FBSyxPQUFPLE9BQU8sRUFDbkIsS0FBSyxVQUFVQSxFQUFLLFNBQVMsRUFDekJBLEVBQUssU0FDTCxLQUFLLE9BQU8sUUFBUSxFQUNwQixLQUFLLFVBQVVBLEVBQUssTUFBTSxFQUVsQyxDQUNBLG1CQUFtQkEsRUFBTSxDQUNyQixLQUFLLFVBQVVBLEVBQUssU0FBUyxFQUM3QixLQUFLLFVBQVVBLEVBQUssU0FBUyxDQUNqQyxDQUNBLGNBQWNBLEVBQU0sQ0FDWkEsRUFBSyxZQUNMLEtBQUssVUFBVUEsRUFBSyxVQUFVLEVBRWxDLEtBQUssT0FBTyxJQUFJLEVBQ2hCLFFBQVc0QixLQUFXNUIsRUFBSyxTQUN2QixLQUFLLFVBQVU0QixDQUFPLEVBRTFCLEtBQUssT0FBTyxHQUFHLENBQ25CLENBQ0EsaUJBQWlCNUIsRUFBTSxDQUNuQixJQUFNNkIsRUFBa0I3QixFQUFLLE9BQVMsZ0JBQ3RDLEtBQUssT0FBTzZCLEVBQWtCLElBQU0sR0FBRyxFQUN2QyxLQUFLLE9BQU8sT0FBTzdCLEVBQUssS0FBSyxDQUFDLEVBQzFCNkIsR0FDQSxLQUFLLE9BQU8sR0FBRyxDQUV2QixDQUNBLHVCQUF1QjdCLEVBQU0sQ0FDekIsUUFBUyxFQUFJLEVBQUc4QixFQUFNOUIsRUFBSyxPQUFPLE9BQVEsRUFBSThCLEVBQUssSUFDM0MsSUFBTUEsRUFBTSxFQUNaLEtBQUssVUFBVTlCLEVBQUssUUFBUSxFQUc1QixLQUFLLE9BQU8sSUFBSSxFQUVwQixLQUFLLFVBQVVBLEVBQUssT0FBTyxDQUFDLENBQUMsQ0FFckMsQ0FDQSxnQkFBZ0JBLEVBQU0sQ0FDZEEsRUFBSyxPQUNMLEtBQUssVUFBVUEsRUFBSyxJQUFJLEVBQ3hCLEtBQUssT0FBTyxHQUFHLEdBRW5CLEtBQUssT0FBTyxRQUFRLEVBQ2hCQSxFQUFLLE1BQ0wsS0FBSyxVQUFVQSxFQUFLLEdBQUcsRUFDdkIsS0FBSyxPQUFPLEdBQUcsR0FFbkIsS0FBSyxPQUFPLE9BQU8sRUFDbkIsS0FBSyxVQUFVQSxFQUFLLElBQUksRUFDcEJBLEVBQUssUUFDTCxLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssVUFBVUEsRUFBSyxLQUFLLEdBRXpCQSxFQUFLLFFBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFlBQVlBLEVBQUssTUFBTyxHQUFHLEdBRWhDQSxFQUFLLFlBQ0wsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLFVBQVVBLEVBQUssU0FBUyxHQUU3QkEsRUFBSyxTQUNMLEtBQUssT0FBTyxHQUFHLEVBQ2YsS0FBSyxVQUFVQSxFQUFLLE1BQU0sR0FFMUJBLEVBQUssY0FBYyxTQUNuQixLQUFLLE9BQU8sR0FBRyxFQUNmLEtBQUssWUFBWUEsRUFBSyxhQUFjLEdBQUcsRUFFL0MsQ0FDQSxhQUFhQSxFQUFNLENBQ1hBLEVBQUssS0FDTCxLQUFLLE9BQU8sTUFBTSxFQUV0QixLQUFLLE9BQU8sU0FBUyxFQUNqQkEsRUFBSyxVQUNMLEtBQUssT0FBTyxZQUFZLENBRWhDLENBQ0EsY0FBY0EsRUFBTSxDQUNoQixLQUFLLE9BQU8sTUFBTSxFQUNkQSxFQUFLLFFBQ0wsS0FBSyxPQUFPLFNBQVMsRUFFekIsS0FBSyxPQUFPLFFBQVEsRUFDcEIsS0FBSyxVQUFVQSxFQUFLLElBQUksRUFDcEJBLEVBQUssVUFDTCxLQUFLLE9BQU8sSUFBSSxFQUNoQixLQUFLLFlBQVlBLEVBQUssT0FBTyxFQUM3QixLQUFLLE9BQU8sR0FBRyxHQUVmQSxFQUFLLFFBQ0wsS0FBSyxPQUFPLFNBQVMsRUFDckIsS0FBSyxVQUFVQSxFQUFLLEtBQUssRUFFakMsQ0FDQSxVQUFVQSxFQUFNLENBQ1osS0FBSyxPQUFPLE9BQU8sRUFDbkIsS0FBSyxVQUFVQSxFQUFLLFVBQVUsRUFDOUIsS0FBSyxPQUFPLE1BQU0sRUFDbEIsS0FBSyxVQUFVQSxFQUFLLFFBQVEsRUFDNUIsS0FBSyxPQUFPLEdBQUcsQ0FDbkIsQ0FDQSxXQUFXQSxFQUFNLENBQ2IsS0FBSyxPQUFPLGFBQWEsRUFDekIsS0FBSyxVQUFVQSxFQUFLLFFBQVEsRUFDNUIsS0FBSyxPQUFPLFNBQVNBLEVBQUssUUFBUSxFQUFFLENBQ3hDLENBQ0EsWUFBWUEsRUFBTSxDQUNkLEtBQUssT0FBTyxTQUFTLEVBQ3JCLEtBQUssWUFBWUEsRUFBSyxVQUFVLENBQ3BDLENBQ0EsU0FBU0EsRUFBTSxDQUNYLEtBQUssT0FBTyxPQUFPQSxFQUFLLFVBQVUsR0FBRyxFQUNqQ0EsRUFBSyxXQUNMLEtBQUssT0FBTyxJQUFJQSxFQUFLLFNBQVMsRUFBRSxDQUV4QyxDQUNBLGNBQWNBLEVBQU0sQ0FDaEIsS0FBSyxPQUFPQSxFQUFLLE1BQU0sQ0FDM0IsQ0FDQSxhQUFhQSxFQUFNLENBQ2YsS0FBSyxPQUFPLFVBQVUsRUFDdEIsS0FBSyxVQUFVQSxFQUFLLFNBQVMsQ0FDakMsQ0FDQSxPQUFPK0IsRUFBSyxDQUNSLEtBQUtqQyxJQUFRaUMsQ0FDakIsQ0FDQSxZQUFZQyxFQUFXLENBQ25CLEtBQUssYUFBYUEsQ0FBUyxFQUMzQixLQUFLLE9BQU8sS0FBSywrQkFBK0IsQ0FBQyxDQUNyRCxDQUNBLDBCQUEyQixDQUN2QixNQUFPLEdBQ1gsQ0FDQSwyQkFBNEIsQ0FDeEIsTUFBTyxHQUNYLENBQ0EsZ0NBQWlDLENBQzdCLE1BQU8sSUFBTSxLQUFLLGFBQ3RCLENBQ0EsOEJBQStCLENBQzNCLE1BQU8sR0FDWCxDQUNBLDRCQUE2QixDQUN6QixNQUFPLEdBQ1gsQ0FDQSw0QkFBNkIsQ0FDekIsTUFBTyxJQUNYLENBQ0EsK0JBQWdDLENBQzVCLE1BQU8sR0FDWCxDQUNBLG1CQUFtQkMsRUFBWSxDQUMzQixJQUFNQyxFQUFXLEtBQUsseUJBQXlCLEVBQ3pDQyxFQUFZLEtBQUssMEJBQTBCLEVBQzdDQyxFQUFZLEdBQ2hCLFFBQVdDLEtBQUtKLEVBQ1pHLEdBQWFDLEVBQ1RBLElBQU1ILEVBQ05FLEdBQWFGLEVBRVJHLElBQU1GLElBQ1hDLEdBQWFELEdBR3JCLE9BQU9DLENBQ1gsQ0FDQSxzQkFBc0JFLEVBQU8sQ0FDekIsT0FBT0EsRUFBTSxRQUFRM0MsR0FBZ0IsSUFBSSxDQUM3QyxDQUNBLGFBQWFxQyxFQUFXLENBQ3BCLEtBQUtqQyxHQUFZLEtBQUtpQyxDQUFTLENBQ25DLENBQ0EscUJBQXFCTSxFQUFPLENBQ3hCLEdBQUlsQixFQUFTa0IsQ0FBSyxFQUNkLEtBQUssb0JBQW9CQSxDQUFLLFVBRXpCQyxFQUFTRCxDQUFLLEdBQUtiLEVBQVVhLENBQUssRUFDdkMsS0FBSyxPQUFPQSxFQUFNLFNBQVMsQ0FBQyxVQUV2QkUsRUFBT0YsQ0FBSyxFQUNqQixLQUFLLE9BQU8sTUFBTSxVQUViRyxFQUFPSCxDQUFLLEVBQ2pCLEtBQUsscUJBQXFCQSxFQUFNLFlBQVksQ0FBQyxVQUV4Q0ksRUFBU0osQ0FBSyxFQUNuQixLQUFLLHFCQUFxQkEsRUFBTSxTQUFTLENBQUMsTUFHMUMsT0FBTSxJQUFJLE1BQU0sMkJBQTJCQSxDQUFLLEVBQUUsQ0FFMUQsQ0FDQSxvQkFBb0JBLEVBQU8sQ0FDdkIsS0FBSyxPQUFPLEdBQUcsRUFDZixLQUFLLE9BQU8sS0FBSyxzQkFBc0JBLENBQUssQ0FBQyxFQUM3QyxLQUFLLE9BQU8sR0FBRyxDQUNuQixDQUNBLG9CQUFvQkssRUFBSyxDQUNyQixPQUFBQSxFQUFJLEtBQUssQ0FBQ0MsRUFBTUMsSUFBVUQsRUFBSyxVQUFZQyxFQUFNLFNBQzNDQyxHQUF5QkYsRUFBSyxRQUFRLEVBQ3BDRSxHQUF5QkQsRUFBTSxRQUFRLEVBQ3pDLENBQUMsRUFDQTNDLEVBQU95QyxDQUFHLENBQ3JCLENBQ0EseUJBQXlCSSxFQUFtQixDQUN4QyxLQUFLLFlBQVlBLENBQWlCLENBQ3RDLENBS0EsNEJBQTZCLENBQ3pCLE1BQU8sRUFDWCxDQUNKLEVBQ01yQixHQUFzQnhCLEVBQU8sQ0FDL0IsWUFBYSxnQkFDYixlQUFnQixvQkFDaEIsVUFBVyxhQUNYLFNBQVUsWUFDVixPQUFRLFNBQ1IsV0FBWSxjQUNaLFNBQVUsVUFDZCxDQUFDLEVBQ0s0QyxHQUEyQjVDLEVBQU8sQ0FDcEMsWUFBYSxFQUNiLGVBQWdCLEVBQ2hCLFVBQVcsRUFDWCxTQUFVLEVBQ1YsT0FBUSxFQUNSLFdBQVksRUFDWixTQUFVLENBQ2QsQ0FBQyxFQUNLb0IsR0FBZ0JwQixFQUFPLENBQ3pCLFVBQVcsYUFDWCxTQUFVLFlBQ1YsVUFBVyxhQUNYLFNBQVUsWUFDVixVQUFXLGFBQ1gsaUJBQWtCLHFCQUNsQixnQkFBaUIsb0JBQ2pCLGlCQUFrQixxQkFDbEIsV0FBWSxjQUNaLFdBQVksY0FDWixNQUFPLE9BQ1gsQ0FBQyxFRTcyQ0Q4QyxJQU9PLElBQU1DLEVBQU4sS0FBeUIsQ0FDNUIsSUFBSSwyQkFBNEIsQ0FDNUIsTUFBTyxFQUNYLENBQ0EsSUFBSSwwQkFBMkIsQ0FDM0IsTUFBTyxFQUNYLENBQ0EsSUFBSSxtQkFBb0IsQ0FDcEIsTUFBTyxFQUNYLENBQ0EsSUFBSSxnQkFBaUIsQ0FDakIsTUFBTyxFQUNYLENBQ0osRUNwQkFDLElBRUEsSUFBTUMsR0FBZ0IsS0FDVEMsRUFBTixjQUFvQ0MsQ0FBcUIsQ0FDNUQsbUJBQW1CQyxFQUFZLENBQzNCLE9BQU9BLEVBQVcsUUFBUUgsR0FBZSxJQUFJLENBQ2pELENBQ0osRUNQQUksSUFJQSxJQUFNQyxHQUFVLE9BQU8scUJBQXFCLEVBQy9CQyxFQUFOLGNBQThCQyxDQUFtQixDQUNwRCxJQUFJLDBCQUEyQixDQUMzQixNQUFPLEVBQ1gsQ0FDQSxJQUFJLG1CQUFvQixDQUNwQixNQUFPLEVBQ1gsQ0FDQSxNQUFNLHFCQUFxQkMsRUFBSUMsRUFBTSxDQUVqQyxNQUFNQyxpQ0FBb0NBLEVBQUksSUFBSUwsRUFBTyxDQUFDLElBQUksUUFBUUcsQ0FBRSxDQUM1RSxDQUNBLE1BQU0scUJBQXFCRyxFQUFLRixFQUFNLENBSXRDLENBQ0osRUNyQkFHLElBS08sU0FBU0MsRUFDZEMsRUFDa0IsQ0FDbEIsT0FBT0MsR0FBVyxDQUFFLEdBQUdELEVBQWMsUUFBU0UsRUFBaUIsY0FBZUMsQ0FBc0IsQ0FBQyxDQUN2RyxDUm1CTyxTQUFTQyxHQUNkQyxFQUNBQyxFQUNBLENBQ0EsR0FBTSxDQUFFLE1BQUFDLEVBQU8sS0FBQUMsQ0FBSyxFQUFJSCxFQUNsQixDQUFFLEtBQU1JLEVBQVcsT0FBQUMsRUFBUSxRQUFBQyxDQUFRLEVBQUlKLEVBRXZDSyxFQUFVQyxFQUFrRlAsQ0FBWSxFQUN4R1EsRUFBTyxPQUFPLEtBQUtILENBQU8sRUFDMUJJLEVBQXFCLENBQUUsQ0FBQ0QsRUFBSyxDQUFDLENBQUUsRUFBR0UsVUFBYSxFQUV0RCxPQUFPQyxFQUNMTCxFQUNHLFdBQVdGLENBQU0sRUFDakIsV0FBV0QsQ0FBUyxFQUNwQixPQUFPRCxFQUFLLElBQUtVLEdBQVMsT0FBTyxLQUFLQSxDQUFHLEVBQUUsU0FBVyxFQUFJSCxFQUFxQkcsQ0FBSSxDQUFDLEVBQ3BGLFVBQVVKLENBQUksRUFDZCxVQUFXSyxHQUFPQSxFQUFHLEtBQWlCLE9BQVEsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQ3JFLENBQ0YsQ0FLTyxTQUFTQyxHQUNkZixFQUNBQyxFQUNBLENBQ0EsR0FBTSxDQUNKLFVBQUFlLEVBQ0EsU0FBQUMsRUFDQSxVQUFBQyxFQUNBLE1BQU8sQ0FBRSxLQUFNZCxFQUFXLE9BQUFDLEVBQVEsUUFBQUMsQ0FBUSxFQUMxQyxPQUFBYSxFQUFTLENBQUUsS0FBTSxjQUFlLE1BQU8sTUFBTyxRQUFTLENBQUMsQ0FBRSxDQUM1RCxFQUFJbkIsRUFFRU8sRUFBVUMsRUFBa0ZQLENBQVksRUFDeEdRLEVBQU8sT0FBTyxLQUFLSCxDQUFPLEVBRTFCYyxFQUFhYixFQUNoQixXQUFXRixDQUFNLEVBQ2pCLFdBQVdELENBQVMsRUFDcEIsT0FBUVUsR0FBT0EsRUFBRyxLQUFtQkEsRUFBRyxHQUFHLFNBQVNBLEVBQUcsR0FBRyxTQUFTLEVBQUdILEVBQUksSUFBSSxDQUFDLENBQUMsRUFBRyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFFdkcsT0FBT0MsRUFDTEwsRUFDRyxLQUFLLFFBQVMsSUFBTWEsQ0FBVSxFQUM5QixXQUFXZixDQUFNLEVBQ2pCLFdBQVcsQ0FBQ0QsRUFBVyxPQUFPLENBQUMsRUFFL0IsT0FBT08sRUFBSSxJQUFJLFdBQVcsRUFBRSxRQUFzQixFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQzdELE9BQVFHLEdBQU9BLEVBQUcsS0FBaUIsT0FBUSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFDN0QsT0FBT0wsQ0FBSSxFQUNYLE1BQU9ZLEdBQU9ILEVBQVUsT0FBTyxDQUFDRyxFQUFJQyxJQUFTRCxFQUFHLFFBQVFDLEVBQUssT0FBUUEsRUFBSyxTQUFTLEVBQUdELENBQUUsQ0FBQyxFQUV6RixNQUFNRSxHQUEwQkosRUFBTyxRQUFTYixDQUFPLENBQUMsRUFDeEQsTUFBTVcsQ0FBUSxFQUVkLE9BQU9OLEVBQUksSUFBSSxPQUFPSyxDQUFTLEVBQUksT0FBT0MsQ0FBUSxDQUFDLENBQUMsQ0FDekQsQ0FDRixDQUdBLFNBQVNPLEdBQ1BDLEVBQ0FuQixFQUMwRCxDQUMxRCxPQUFJbUIsRUFBSyxPQUFTLGVBQ1JYLEdBQW9DLENBQzFDLElBQU1ZLEVBQWFwQixFQUFRbUIsRUFBSyxNQUFNLEVBQ2hDLENBQUUsTUFBQUUsRUFBTyxTQUFBQyxFQUFVLE9BQUFDLENBQU8sRUFBSUosRUFHcEMsR0FBSUMsR0FBWSxTQUFTLFFBQVUsUUFBVUMsR0FBUyxNQUFRQyxJQUFhLE1BQVFBLElBQWEsU0FBVSxDQUN4RyxJQUFNRSxFQUFlLElBQUlKLEVBQVcsU0FBUyxNQUFNLE1BQU1BLEVBQVcsU0FBUyxJQUFJLElBQ2pGLE9BQU9aLEVBQUdBLEVBQUcsSUFBSWUsQ0FBTSxFQUFHRCxFQUFVZCxFQUFHLEtBQUtILEVBQUksSUFBSWdCLENBQUssRUFBR2hCLEVBQUksSUFBSW1CLENBQVksQ0FBQyxDQUFDLENBQ3BGLENBRUEsT0FBT2hCLEVBQUdBLEVBQUcsSUFBSWUsQ0FBTSxFQUFHRCxFQUFVRCxDQUFLLENBQzNDLEVBRU9KLEdBQTBCRSxFQUFLLFFBQVNuQixDQUFPLENBRTFELENBRUEsU0FBU2lCLEdBQ1BRLEVBQ0F6QixFQUMwRCxDQUMxRCxHQUFJeUIsRUFBUSxTQUFXLEVBQUcsT0FBUWpCLEdBQU9BLEVBQUcsSUFBSSxFQUFJLEVBRXBELElBQU1rQixFQUF3RixDQUFDLEVBQzNGQyxFQUF3RixDQUFDLEVBRTdGLFFBQVNDLEVBQUksRUFBR0EsRUFBSUgsRUFBUSxPQUFRRyxJQUNsQ0QsRUFBd0IsS0FBS1QsR0FBMkJPLEVBQVFHLENBQUMsRUFBSTVCLENBQU8sQ0FBQyxHQUd6RTRCLElBQU1ILEVBQVEsT0FBUyxHQUFLQSxFQUFRRyxDQUFDLEVBQUcsUUFBVSxRQUNwREYsRUFBc0IsS0FBS0MsQ0FBdUIsRUFDbERBLEVBQTBCLENBQUMsR0FJL0IsT0FBUW5CLEdBQW9DLENBQzFDLElBQU1xQixFQUFpQkgsRUFBc0IsSUFBS0ksR0FDekN0QixFQUFHLElBQUlzQixFQUFNLElBQUs3QixHQUFZQSxFQUFRTyxDQUFFLENBQUMsQ0FBQyxDQUNsRCxFQUVELE9BQU9BLEVBQUcsR0FBR3FCLENBQWMsQ0FDN0IsQ0FDRixDQUtPLFNBQVNFLElBQWtCLENBQ2hDLE1BQU8sQ0FDTCxDQUNFLFdBQVksSUFBSSxLQUFLLDBCQUEwQixFQUMvQyxLQUFNLFFBQ04sV0FBWSxLQUNaLEdBQUksRUFDSixLQUFNLFdBQ04sSUFBSyxJQUNMLEtBQU0sUUFDTixVQUFXLGtCQUNiLEVBQ0EsQ0FDRSxXQUFZLElBQUksS0FBSywwQkFBMEIsRUFDL0MsS0FBTSxRQUNOLFdBQVksS0FDWixHQUFJLEVBQ0osS0FBTSxXQUNOLElBQUssSUFDTCxLQUFNLFlBQ04sVUFBVyxzQkFDYixDQUNGLENBSUYsQ0FLTyxTQUFTQyxHQUNkdEMsRUFDQUMsRUFDQSxDQUNBLEdBQU0sQ0FDSixRQUFBc0MsRUFDQSxJQUFBMUIsRUFDQSxNQUFPLENBQUUsUUFBQVAsRUFBUyxLQUFNRixFQUFXLE9BQUFDLENBQU8sQ0FDNUMsRUFBSUwsRUFFRU8sRUFBVUMsRUFBa0ZQLENBQVksRUFDeEdRLEVBQU8sT0FBTyxLQUFLSCxDQUFPLEVBRWhDLE9BQU9NLEVBQ0xMLEVBQ0csV0FBV0YsQ0FBTSxFQUNqQixZQUFZRCxDQUFTLEVBQ3JCLElBQUltQyxDQUFPLEVBQ1gsTUFBTUMsRUFBd0IsQ0FBQzNCLENBQUcsRUFBR1AsQ0FBTyxDQUFDLEVBQzdDLFVBQVVHLENBQUksRUFDZCxVQUFXSyxHQUFPLENBQ2pCQSxFQUFHLEtBQWlCLE9BQVEsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUM3Q0EsRUFDRyxLQUFtQkEsRUFBRyxHQUFHLFFBQVMsQ0FBQ0EsRUFBR0EsRUFBRyxHQUFHLFVBQVcsQ0FBQ0gsbUJBQXFCLENBQUMsRUFBRyxJQUFLLEdBQVMsQ0FBQyxDQUFDLEVBQUcsTUFBTSxFQUMxRyxHQUFHLG1CQUFtQixDQUMzQixDQUFDLENBQ0wsQ0FDRixDQUtPLFNBQVM4QixHQUNkekMsRUFDQUMsRUFDQSxDQUNBLEdBQU0sQ0FDSixLQUFBRSxFQUNBLE1BQU8sQ0FBRSxRQUFBRyxFQUFTLEtBQU1GLEVBQVcsT0FBQUMsQ0FBTyxDQUM1QyxFQUFJTCxFQUVFTyxFQUFVQyxFQUFrRlAsQ0FBWSxFQUU5RyxPQUFPVyxFQUFRTCxFQUFRLFdBQVdGLENBQU0sRUFBRSxXQUFXRCxDQUFTLEVBQUUsTUFBTW9DLEVBQXdCckMsRUFBTUcsQ0FBTyxDQUFDLENBQUMsQ0FDL0csQ1MzTkFvQyxJQ0FBQyxJQW1ETyxTQUFTQyxHQUFjQyxFQUFNLENBQ2hDLE9BQU9DLCtDQUFrREQsQ0FBSSxVQUNqRSxDRC9DQSxJQUFNRSxHQUFxQixJQUNyQkMsR0FBa0IsSUFDbEJDLEdBQWMsQ0FBQ0YsR0FBb0JDLEVBQWUsRUE4RmpELFNBQVNFLEdBQWVDLEVBQXVFLENBQ3BHLE9BQU9DLEVBQ0xDLEVBQStCRixDQUFZLEVBQ3hDLFdBQVcsNEJBQTRCLEVBQ3ZDLFVBQVUsZ0NBQWlDLG1CQUFvQixRQUFRLEVBQ3ZFLE1BQU1HLEVBQW1CLEVBRXpCLE1BQU0sY0FBZSxLQUFNTCxFQUFXLEVBQ3RDLE9BQVFNLEdBQU8sQ0FDZCx1QkFDQSxzQkFDQUMsR0FDRUQsRUFDRyxXQUFXLGdDQUFnQyxFQUMzQyxVQUFVLDRCQUE2QixVQUFXLGNBQWMsRUFDaEUsVUFBVSxpQ0FBa0MsVUFBVyxrQkFBa0IsRUFDekUsU0FBUyxxQ0FBdUNFLEdBQy9DQSxFQUNHLEdBQUcsaUJBQWtCLElBQUssR0FBRyxFQUM3QixNQUFNLGtCQUFtQixJQUFLLFNBQVMsRUFDdkMsR0FBSUYsR0FBT0EsRUFBRyxhQUFjLElBQUtBLEVBQUcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQ2pFLEVBQ0MsU0FBUyxxQ0FBdUNFLEdBQy9DQSxFQUNHLEdBQUcsaUJBQWtCLElBQUssR0FBRyxFQUM3QixNQUFNLGtCQUFtQixJQUFLLFNBQVMsRUFDdkMsR0FBSUYsR0FBT0EsRUFBRyxhQUFjLElBQUtBLEVBQUcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQ2pFLEVBQ0MsU0FBUyxnQ0FBaUMsYUFBYyxrQkFBa0IsRUFDMUUsU0FBUyxtQ0FBb0MsWUFBYSxxQkFBcUIsRUFDL0UsU0FBUyxvQ0FBc0NFLEdBQzlDQSxFQUNHLE1BQU0sa0JBQW1CLElBQUssWUFBWSxFQUUxQyxHQUFJQyxHQUFVQSxFQUFNLGdCQUFpQixJQUFLQSxFQUFNLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQzlFLEVBQ0MsU0FBUyxlQUFnQixJQUFLLFNBQVMsRUFFdkMsTUFBTSxhQUFjLEtBQU0sQ0FBQyxFQUMzQixNQUFNLG1CQUFvQixLQUFNLEVBQUksRUFDcEMsT0FBTyxDQUNOLHNCQUNBLDBCQUNBLGlDQUNBLHNDQUNBLHNDQUNBLHNDQUNGLENBQUMsRUFDQSxPQUFRSCxHQUFPLENBQ2RBLEVBQUcsZ0JBQWlCLFNBQVUsSUFBSSxFQUFFLFFBQWlCLEVBQUUsR0FBRyxJQUFJLEVBQzlEQSxFQUFHLG1CQUFvQixLQUFNLEVBQUUsRUFBRSxRQUFpQixFQUFFLEdBQUcsVUFBVSxFQUNqRUEsRUFBRyxpQkFBa0IsS0FBTSxFQUFJLEVBQUUsUUFBaUIsRUFBRSxHQUFHLFVBQVUsRUFDakVBLEVBQUcsR0FDQSxTQUNDQSxFQUNHLFdBQVcsMkJBQTJCLEVBQ3RDLFNBQVMsZ0JBQWlCLElBQUssU0FBUyxFQUN4QyxPQUFRQSxHQUFPQSxFQUFHLEdBQUcsUUFBUUEsRUFBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQ2hFSSxPQUNGLEVBQ0MsR0FBRyxTQUFTLENBQ2pCLENBQUMsQ0FDTCxFQUFFLEdBQUcsU0FBUyxDQUNoQixDQUFDLENBQ0wsQ0FDRixDQUtPLFNBQVNDLElBQWtCLENBQ2hDLE1BQU8sQ0FDTCxDQUNFLE9BQVEsTUFDUixLQUFNLFVBQ04sUUFBUyxDQUNQLENBQ0UsS0FBTSxLQUNOLFNBQVUsT0FDVixnQkFBaUIsYUFDakIsR0FBSSxHQUNKLFNBQVUsR0FDVixRQUFTLENBQUMsRUFDVixTQUFVLEdBQ1YsbUJBQW9CLEtBQ3BCLGtCQUFtQixLQUNuQixtQkFBb0IsSUFDdEIsRUFDQSxDQUNFLEtBQU0sT0FDTixTQUFVLE9BQ1YsZ0JBQWlCLGFBQ2pCLEdBQUksR0FDSixTQUFVLEdBQ1YsUUFBUyxDQUFDLEVBQ1YsU0FBVSxHQUNWLG1CQUFvQixLQUNwQixrQkFBbUIsS0FDbkIsbUJBQW9CLElBQ3RCLENBQ0YsQ0FDRixFQUNBLENBQ0UsT0FBUSxTQUNSLEtBQU0sUUFDTixRQUFTLENBQ1AsQ0FDRSxLQUFNLEtBQ04sU0FBVSxPQUNWLGdCQUFpQixhQUNqQixHQUFJLEdBQ0osU0FBVSxHQUNWLFFBQVMsQ0FBQyxFQUNWLFNBQVUsR0FDVixtQkFBb0IsS0FDcEIsa0JBQW1CLEtBQ25CLG1CQUFvQixJQUN0QixFQUNBLENBQ0UsS0FBTSxhQUNOLFNBQVUsWUFDVixnQkFBaUIsYUFDakIsR0FBSSxHQUNKLFNBQVUsR0FDVixRQUFTLENBQUMsRUFDVixTQUFVLEdBQ1YsbUJBQW9CLEtBQ3BCLGtCQUFtQixLQUNuQixtQkFBb0IsSUFDdEIsRUFDQSxDQUNFLEtBQU0sYUFDTixTQUFVLFlBQ1YsZ0JBQWlCLGFBQ2pCLEdBQUksR0FDSixTQUFVLEdBQ1YsUUFBUyxDQUFDLEVBQ1YsU0FBVSxHQUNWLG1CQUFvQixLQUNwQixrQkFBbUIsS0FDbkIsbUJBQW9CLElBQ3RCLEVBQ0EsQ0FDRSxLQUFNLE9BQ04sU0FBVSxVQUNWLGdCQUFpQixhQUNqQixHQUFJLEdBQ0osU0FBVSxHQUNWLFFBQVMsQ0FBQyxFQUNWLFNBQVUsR0FDVixtQkFBb0IsS0FDcEIsa0JBQW1CLEtBQ25CLG1CQUFvQixJQUN0QixFQUNBLENBQ0UsS0FBTSxPQUNOLFNBQVUsVUFDVixnQkFBaUIsYUFDakIsR0FBSSxHQUNKLFNBQVUsR0FDVixRQUFTLENBQUMsRUFDVixTQUFVLEdBQ1YsbUJBQW9CLEtBQ3BCLGtCQUFtQixLQUNuQixtQkFBb0IsSUFDdEIsRUFDQSxDQUNFLEtBQU0sWUFDTixTQUFVLE9BQ1YsZ0JBQWlCLGFBQ2pCLEdBQUksR0FDSixTQUFVLEdBQ1YsUUFBUyxDQUFDLEVBQ1YsU0FBVSxHQUNWLG1CQUFvQixLQUNwQixrQkFBbUIsS0FDbkIsbUJBQW9CLElBQ3RCLENBQ0YsQ0FDRixDQUNGLENBQ0YsQ0FLTyxTQUFTQyxJQUFtQixDQUNqQyxJQUFNQyxFQUFVVCxFQUFxQixFQUVyQyxPQUFPRCxFQUFRVSxFQUFRLGFBQWFBLEVBQVEsR0FBVyxrQkFBbUIsQ0FBQ0gsRUFBSSxJQUFJLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUNsSCxDQUtPLFNBQVNJLElBQW9CLENBQ2xDLE1BQU8sQ0FBQyxDQUFFLFNBQVUsS0FBTSxDQUFDLENBQzdCLENBS0EsU0FBU1QsR0FNUFUsRUFBVSxDQUNWLE9BQU9BLEVBQUcsTUFBTSxhQUFjLEtBQU0sTUFBTSxFQUFFLE1BQU0sYUFBYyxLQUFNLG9CQUFvQixDQUM1RixDWi9STyxTQUFTQyxHQUFzQkMsRUFBb0QsQ0FDeEYsR0FBTSxDQUFFLFNBQUFDLEVBQVUsR0FBR0MsQ0FBa0IsRUFBSUYsRUFFM0MsTUFBTyxDQUNMLGNBQWUsU0FDZixNQUFNLFdBQVdHLEVBQWlFLENBQ2hGLEdBQUksQ0FDRixJQUFNQyxFQUFjQyxHQUFlSCxDQUFpQixFQUM5Q0ksRUFBZ0JDLEdBQWlCLEVBRWpDLENBQUMsQ0FBQ0MsRUFBYUMsQ0FBTSxFQUFHLENBQUNDLEVBQWVDLENBQVMsQ0FBQyxFQUFJLE1BQU0sUUFBUSxJQUFJLENBQzVFVixFQUFTLFFBQVFHLEVBQWFELENBQU8sRUFDckNGLEVBQVMsUUFBUUssRUFBZUgsQ0FBTyxDQUN6QyxDQUFDLEVBRUQsR0FBSUssRUFDRixPQUFPSSxFQUFtQixDQUFFLE1BQU9KLEVBQWEsTUFBT0osQ0FBWSxDQUFDLEVBR3RFLEdBQUlNLEVBQ0YsT0FBT0UsRUFBbUIsQ0FBRSxNQUFPRixFQUFlLE1BQU9KLENBQWMsQ0FBQyxFQUcxRSxJQUFNTyxFQUFXRixFQUFVLENBQUMsR0FBRyxTQUUvQixPQUFLRSxFQUlFLENBQUMsS0FBTUMsR0FBb0IsQ0FBRSxPQUFBTCxFQUFRLFNBQUFJLEVBQVUsTUFBT1QsQ0FBWSxDQUFDLENBQUMsRUFIbEVRLEVBQW1CLENBQUUsTUFBTyxJQUFJLE1BQU0sb0JBQW9CLEVBQUcsTUFBT04sQ0FBYyxDQUFDLENBSTlGLE9BQVNTLEVBQWdCLENBRXZCLE9BQU9ILEVBQW1CLENBQUUsTUFBT0csQ0FBZSxDQUFDLENBQ3JELENBQ0YsRUFFQSxNQUFNLE1BQU1DLEVBQVNiLEVBQTRELENBQy9FLEdBQUksQ0FDRixJQUFNYyxFQUFRQyxHQUFlRixFQUFTZCxDQUFpQixFQUNqRCxDQUFDYSxFQUFPSSxDQUFPLEVBQUksTUFBTWxCLEVBQVMsUUFBUWdCLEVBQU9kLENBQU8sRUFFOUQsT0FBSVksRUFDS0gsRUFBbUIsQ0FBRSxNQUFBRyxFQUFPLE1BQUFFLENBQU0sQ0FBQyxFQUdyQyxDQUFDLEtBQU0sQ0FBRSxpQkFBa0JFLEVBQVEsQ0FBQyxHQUFHLEtBQU8sSUFBSyxLQUFNQSxFQUFTLE1BQUFGLENBQU0sQ0FBQyxDQUNsRixPQUFTRixFQUFnQixDQUV2QixPQUFPSCxFQUFtQixDQUFFLE1BQU9HLENBQWUsQ0FBQyxDQUNyRCxDQUNGLEVBRUEsTUFBTSxPQUFPQyxFQUFTYixFQUE2RCxDQUNqRixHQUFJLENBQ0YsSUFBTWMsRUFBUUcsR0FBZUosRUFBU2QsQ0FBaUIsRUFDakQsQ0FBQ2EsRUFBT00sQ0FBSSxFQUFJLE1BQU1wQixFQUFTLFFBQVFnQixFQUFPZCxDQUFPLEVBRTNELE9BQUlZLEVBQ0tILEVBQW1CLENBQUUsTUFBQUcsRUFBTyxNQUFBRSxDQUFNLENBQUMsRUFHckMsQ0FBQyxLQUFNLENBQUUsS0FBQUksRUFBTSxNQUFBSixDQUFNLENBQUMsQ0FDL0IsT0FBU0YsRUFBZ0IsQ0FDdkIsT0FBT0gsRUFBbUIsQ0FBRSxNQUFPRyxDQUFlLENBQUMsQ0FDckQsQ0FDRixFQUVBLE1BQU0sT0FBT0MsRUFBU2IsRUFBNkQsQ0FDakYsR0FBSSxDQUNGLElBQU1jLEVBQVFLLEdBQWVOLEVBQVNkLENBQWlCLEVBQ2pELENBQUNhLEVBQU9JLENBQU8sRUFBSSxNQUFNbEIsRUFBUyxRQUFRZ0IsRUFBT2QsQ0FBTyxFQUU5RCxHQUFJWSxFQUNGLE9BQU9ILEVBQW1CLENBQUUsTUFBQUcsRUFBTyxNQUFBRSxDQUFNLENBQUMsRUFHNUMsR0FBTSxDQUFDTSxDQUFHLEVBQUlKLEVBRWQsT0FBS0ksRUFLRSxDQUFDLEtBQU0sQ0FBRSxJQUFBQSxFQUFLLE1BQUFOLENBQU0sQ0FBQyxFQUhuQkwsRUFBbUIsQ0FBRSxNQUFPLElBQUksTUFBTSxlQUFlLEVBQUcsTUFBQUssQ0FBTSxDQUFDLENBSTFFLE9BQVNGLEVBQWdCLENBQ3ZCLE9BQU9ILEVBQW1CLENBQUUsTUFBT0csQ0FBZSxDQUFDLENBQ3JELENBQ0YsRUFDQSxNQUFNLE9BQU9DLEVBQVNiLEVBQTZELENBQ2pGLEdBQUksQ0FDRixJQUFNYyxFQUFRTyxHQUFlUixFQUFTZCxDQUFpQixFQUNqRCxDQUFDYSxDQUFLLEVBQUksTUFBTWQsRUFBUyxRQUFRZ0IsRUFBT2QsQ0FBTyxFQUVyRCxPQUFJWSxFQUNLSCxFQUFtQixDQUFFLE1BQUFHLEVBQU8sTUFBQUUsQ0FBTSxDQUFDLEVBR3JDLENBQUMsS0FBTSxDQUFFLEdBQUdELEVBQVMsTUFBQUMsQ0FBTSxDQUFDLENBQ3JDLE9BQVNGLEVBQWdCLENBQ3ZCLE9BQU9ILEVBQW1CLENBQUUsTUFBT0csQ0FBZSxDQUFDLENBQ3JELENBQ0YsQ0FDRixDQUNGLENBRUEsU0FBU0QsR0FBb0JXLEVBQXNGLENBQ2pILEdBQU0sQ0FBRSxPQUFBaEIsRUFBUSxTQUFBSSxFQUFVLE1BQUFJLENBQU0sRUFBSVEsRUFFcEMsT0FBT2hCLEVBQU8sT0FDWixDQUFDaUIsRUFBUUgsSUFBUSxDQUNmLEdBQU0sQ0FBRSxRQUFBSSxDQUFRLEVBQUlELEVBQ2QsQ0FBRSxRQUFBRSxFQUFTLEtBQU1DLEVBQVcsT0FBQUMsQ0FBTyxFQUFJUCxFQUV2Q1EsRUFBZ0JILEVBQVEsT0FDNUIsQ0FBQ0EsRUFBU0ksSUFBVyxDQUNuQixHQUFNLENBQUUsU0FBQUMsRUFBVSxnQkFBQUMsRUFBaUIsS0FBTUMsRUFBWSxRQUFBaEMsRUFBUyxTQUFBaUMsRUFBUyxFQUFJSixFQUVyRUssRUFBVUosRUFBUyxXQUFXLEdBQUcsRUFDakNLLEVBQW1CRCxFQUFVSixFQUFTLE1BQU0sQ0FBQyxFQUFJQSxFQUV2RCxNQUFPLENBQ0wsR0FBR0wsRUFDSCxDQUFDTyxDQUFVLEVBQUcsQ0FDWixTQUFVLENBQ1IsR0FBSUksR0FBa0NELENBQWdCLEdBQUssQ0FDekQsTUFBT25DLEVBQVEsT0FBUyxFQUFJLE9BQVMsS0FDdkMsRUFDQSxRQUFBa0MsRUFDQSxTQUFVSCxJQUFvQixhQUM5QixLQUFNRyxFQUFVLEdBQUdDLENBQWdCLEtBQU9BLEVBQzFDLFFBQUFuQyxFQUNBLE9BQVErQixDQUNWLEVBQ0EsV0FBWUYsRUFBTyxTQUNuQixlQUFnQkEsRUFBTyxHQUN2QixLQUFNRyxFQUNOLFNBQUFDLEdBQ0EsT0FBQU4sRUFDQSxNQUFPRCxFQUNQLFNBQVVHLEVBQU8sbUJBQ2pCLFFBQVNBLEVBQU8sa0JBQ2hCLFNBQVVBLEVBQU8sa0JBQ25CLENBQ0YsQ0FDRixFQUNBLENBQUMsQ0FDSCxFQUVBLE9BQUlMLEVBQVFHLENBQU0sSUFBTSxTQUN0QkgsRUFBUUcsQ0FBTSxFQUFJLENBQ2hCLEtBQU1BLEVBQ04sT0FBUSxDQUFDLENBQ1gsR0FHRkgsRUFBUUcsQ0FBTSxFQUFFLE9BQU9ELENBQVMsRUFBSSxDQUNsQyxRQUFTRSxFQUNULEtBQU1GLEVBQ04sT0FBQUMsQ0FDRixFQUVPSixDQUNULEVBQ0EsQ0FDRSxRQUFTLENBQUUsT0FBUSxDQUFFLE9BQVEsQ0FBQyxFQUFHLEtBQU0sUUFBUyxDQUFFLEVBQ2xELFNBQUFiLEVBQ0EsZ0JBQUEyQixHQUNBLE1BQUF2QixDQUNGLENBQ0YsQ0FDRixDQUVBLElBQU11QixHQUFrQixDQUN0QixJQUNBLEtBQ0EsSUFDQSxLQUNBLElBQ0EsS0FDQSxLQUNBLFNBQ0EsT0FDQSxXQUNBLFFBQ0EsV0FDRixFQUtPLFNBQVNDLElBQWlCLENBQy9CLElBQU1oQyxFQUFTaUMsR0FBZ0IsRUFDekIsQ0FBQyxDQUFFLFNBQUE3QixDQUFTLENBQUMsRUFBSThCLEdBQWtCLEVBR3pDLE9BQU83QixHQUFvQixDQUFFLE9BQUFMLEVBQVEsU0FBQUksRUFBVSxNQUZqQyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUssVUFBVyxDQUVLLENBQUMsQ0FjeEQiLAogICJuYW1lcyI6IFsiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiY3JlYXRlQWRhcHRlckVycm9yIiwgImFyZ3MiLCAiZXJyb3IiLCAicXVlcnkiLCAiYWRhcHRlckVycm9yIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJSYXdCdWlsZGVySW1wbCIsICJfUmF3QnVpbGRlckltcGwiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJhbGlhcyIsICJBbGlhc2VkUmF3QnVpbGRlckltcGwiLCAicGx1Z2luIiwgIiN0b09wZXJhdGlvbk5vZGUiLCAiI2dldEV4ZWN1dG9yIiwgImV4ZWN1dG9yUHJvdmlkZXIiLCAiI2NvbXBpbGUiLCAiZXhlY3V0b3IiLCAiTk9PUF9RVUVSWV9FWEVDVVRPUiIsICJjcmVhdGVSYXdCdWlsZGVyIiwgIiNyYXdCdWlsZGVyIiwgIiNhbGlhcyIsICJyYXdCdWlsZGVyIiwgIkFsaWFzTm9kZSIsICJpc09wZXJhdGlvbk5vZGVTb3VyY2UiLCAiSWRlbnRpZmllck5vZGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAic3FsIiwgInNxbEZyYWdtZW50cyIsICJwYXJhbWV0ZXJzIiwgImNyZWF0ZVJhd0J1aWxkZXIiLCAiY3JlYXRlUXVlcnlJZCIsICJSYXdOb2RlIiwgInBhcnNlUGFyYW1ldGVyIiwgImNvbHVtblJlZmVyZW5jZSIsICJwYXJzZVN0cmluZ1JlZmVyZW5jZSIsICJ2YWx1ZSIsICJwYXJzZVZhbHVlRXhwcmVzc2lvbiIsICJ0YWJsZVJlZmVyZW5jZSIsICJwYXJzZVRhYmxlIiwgImlkcyIsICJmcmFnbWVudHMiLCAiSWRlbnRpZmllck5vZGUiLCAiVmFsdWVOb2RlIiwgImFycmF5IiwgInNlcGFyYXRvciIsICJub2RlcyIsICJzZXAiLCAiaSIsICJwYXJhbSIsICJpc09wZXJhdGlvbk5vZGVTb3VyY2UiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiT3BlcmF0aW9uTm9kZVZpc2l0b3IiLCAiI3Zpc2l0b3JzIiwgImZyZWV6ZSIsICJub2RlIiwgIkxJVF9XUkFQX1JFR0VYIiwgIkRlZmF1bHRRdWVyeUNvbXBpbGVyIiwgIk9wZXJhdGlvbk5vZGVWaXNpdG9yIiwgIiNzcWwiLCAiI3BhcmFtZXRlcnMiLCAibm9kZSIsICJxdWVyeUlkIiwgImZyZWV6ZSIsICJ3cmFwSW5QYXJlbnMiLCAiUGFyZW5zTm9kZSIsICJJbnNlcnRRdWVyeU5vZGUiLCAiQ3JlYXRlVGFibGVOb2RlIiwgIkNyZWF0ZVZpZXdOb2RlIiwgIlNldE9wZXJhdGlvbk5vZGUiLCAiZXhwcmVzc2lvbnMiLCAibm9kZXMiLCAic2VwYXJhdG9yIiwgImxhc3RJbmRleCIsICJpIiwgInJvb3RRdWVyeU5vZGUiLCAiUXVlcnlOb2RlIiwgImlzU3ViUXVlcnkiLCAiTWVyZ2VRdWVyeU5vZGUiLCAibG9nT25jZSIsICJfIiwgImlzU3RyaW5nIiwgInZhbHVlcyIsICJKT0lOX1RZUEVfU1FMIiwgInNxbEZyYWdtZW50cyIsICJwYXJhbXMiLCAiaXNCb29sZWFuIiwgIlNFTEVDVF9NT0RJRklFUl9TUUwiLCAiT3BlcmF0b3JOb2RlIiwgInBhdGhMZWciLCAiaXNBcnJheUxvY2F0aW9uIiwgImxlbiIsICJzdHIiLCAicGFyYW1ldGVyIiwgImlkZW50aWZpZXIiLCAibGVmdFdyYXAiLCAicmlnaHRXcmFwIiwgInNhbml0aXplZCIsICJjIiwgInZhbHVlIiwgImlzTnVtYmVyIiwgImlzTnVsbCIsICJpc0RhdGUiLCAiaXNCaWdJbnQiLCAiYXJyIiwgImxlZnQiLCAicmlnaHQiLCAiU0VMRUNUX01PRElGSUVSX1BSSU9SSVRZIiwgImNvbHVtbkFsdGVyYXRpb25zIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkRpYWxlY3RBZGFwdGVyQmFzZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJJRF9XUkFQX1JFR0VYIiwgIlBvc3RncmVzUXVlcnlDb21waWxlciIsICJEZWZhdWx0UXVlcnlDb21waWxlciIsICJpZGVudGlmaWVyIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkxPQ0tfSUQiLCAiUG9zdGdyZXNBZGFwdGVyIiwgIkRpYWxlY3RBZGFwdGVyQmFzZSIsICJkYiIsICJfb3B0IiwgInNxbCIsICJfZGIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiZ2V0UG9zdGdyZVNRTEJ1aWxkZXIiLCAicmVxdWlyZW1lbnRzIiwgImdldEJ1aWxkZXIiLCAiUG9zdGdyZXNBZGFwdGVyIiwgIlBvc3RncmVzUXVlcnlDb21waWxlciIsICJnZXRJbnNlcnRRdWVyeSIsICJkZXRhaWxzIiwgInJlcXVpcmVtZW50cyIsICJ0YWJsZSIsICJyb3dzIiwgInRhYmxlTmFtZSIsICJzY2hlbWEiLCAiY29sdW1ucyIsICJidWlsZGVyIiwgImdldFBvc3RncmVTUUxCdWlsZGVyIiwgImNvbHMiLCAiZW1wdHlSb3dXb3JrYXJvdW5kIiwgInNxbCIsICJjb21waWxlIiwgInJvdyIsICJlYiIsICJnZXRTZWxlY3RRdWVyeSIsICJwYWdlSW5kZXgiLCAicGFnZVNpemUiLCAic29ydE9yZGVyIiwgImZpbHRlciIsICJjb3VudFF1ZXJ5IiwgInFiIiwgIml0ZW0iLCAiZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbiIsICJidWlsZEJhc2VFeHByZXNzaW9uQnVpbGRlciIsICJzcGVjIiwgImNvbHVtbkluZm8iLCAidmFsdWUiLCAib3BlcmF0b3IiLCAiY29sdW1uIiwgImVudW1UeXBlTmFtZSIsICJmaWx0ZXJzIiwgIm9yR3JvdXBzT2ZBbmRCdWlsZGVycyIsICJjdXJyZW50QW5kR3JvdXBCdWlsZGVycyIsICJpIiwgImFuZEV4cHJlc3Npb25zIiwgImdyb3VwIiwgIm1vY2tTZWxlY3RRdWVyeSIsICJnZXRVcGRhdGVRdWVyeSIsICJjaGFuZ2VzIiwgImFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzIiwgImdldERlbGV0ZVF1ZXJ5IiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImpzb25BcnJheUZyb20iLCAiZXhwciIsICJzcWwiLCAiUkVHVUxBUl9UQUJMRV9LSU5EIiwgIlZJRVdfVEFCTEVfS0lORCIsICJUQUJMRV9LSU5EUyIsICJnZXRUYWJsZXNRdWVyeSIsICJyZXF1aXJlbWVudHMiLCAiY29tcGlsZSIsICJnZXRQb3N0Z3JlU1FMQnVpbGRlciIsICJleGNsdWRlU3lzdGVtVGFibGVzIiwgImViIiwgImpzb25BcnJheUZyb20iLCAiamIiLCAib25fZWIiLCAic3FsIiwgIm1vY2tUYWJsZXNRdWVyeSIsICJnZXRUaW1lem9uZVF1ZXJ5IiwgImJ1aWxkZXIiLCAibW9ja1RpbWV6b25lUXVlcnkiLCAicWIiLCAiY3JlYXRlUG9zdGdyZXNBZGFwdGVyIiwgInJlcXVpcmVtZW50cyIsICJleGVjdXRvciIsICJvdGhlclJlcXVpcmVtZW50cyIsICJvcHRpb25zIiwgInRhYmxlc1F1ZXJ5IiwgImdldFRhYmxlc1F1ZXJ5IiwgInRpbWV6b25lUXVlcnkiLCAiZ2V0VGltZXpvbmVRdWVyeSIsICJ0YWJsZXNFcnJvciIsICJ0YWJsZXMiLCAidGltZXpvbmVFcnJvciIsICJ0aW1lem9uZXMiLCAiY3JlYXRlQWRhcHRlckVycm9yIiwgInRpbWV6b25lIiwgImNyZWF0ZUludHJvc3BlY3Rpb24iLCAiZXJyb3IiLCAiZGV0YWlscyIsICJxdWVyeSIsICJnZXRTZWxlY3RRdWVyeSIsICJyZXN1bHRzIiwgImdldEluc2VydFF1ZXJ5IiwgInJvd3MiLCAiZ2V0VXBkYXRlUXVlcnkiLCAicm93IiwgImdldERlbGV0ZVF1ZXJ5IiwgImFyZ3MiLCAicmVzdWx0IiwgInNjaGVtYXMiLCAiY29sdW1ucyIsICJ0YWJsZU5hbWUiLCAic2NoZW1hIiwgImNvbHVtbnNSZWNvcmQiLCAiY29sdW1uIiwgImRhdGF0eXBlIiwgImRhdGF0eXBlX3NjaGVtYSIsICJjb2x1bW5OYW1lIiwgIm51bGxhYmxlIiwgImlzQXJyYXkiLCAic3RyaXBwZWREYXRhVHlwZSIsICJQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEiLCAiZmlsdGVyT3BlcmF0b3JzIiwgIm1vY2tJbnRyb3NwZWN0IiwgIm1vY2tUYWJsZXNRdWVyeSIsICJtb2NrVGltZXpvbmVRdWVyeSJdCn0K