angular2
Version:
Angular 2 - a web framework for modern web apps
412 lines (411 loc) • 93.5 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
import { isPresent, isBlank, IS_DART, CONST_EXPR } from 'angular2/src/facade/lang';
import { ListWrapper } from 'angular2/src/facade/collection';
import { templateVisitAll } from './template_ast';
import { SourceExpression } from './source_module';
import { AppView, flattenNestedViewRenderNodes, checkSlotCount } from 'angular2/src/core/linker/view';
import { ViewType } from 'angular2/src/core/linker/view_type';
import { AppElement } from 'angular2/src/core/linker/element';
import { ViewEncapsulation } from 'angular2/src/core/metadata/view';
import { escapeSingleQuoteString, codeGenValueFn, codeGenFnHeader, Statement, escapeValue, codeGenArray, codeGenFlatArray, Expression, flattenArray, CONST_VAR } from './util';
import { Injectable } from 'angular2/src/core/di';
import { APP_VIEW_MODULE_REF, APP_EL_MODULE_REF, METADATA_MODULE_REF } from './proto_view_compiler';
export const VIEW_JIT_IMPORTS = CONST_EXPR({
'AppView': AppView,
'AppElement': AppElement,
'flattenNestedViewRenderNodes': flattenNestedViewRenderNodes,
'checkSlotCount': checkSlotCount
});
export let ViewCompiler = class {
constructor() {
}
compileComponentRuntime(component, template, styles, protoViews, changeDetectorFactories, componentViewFactory) {
var viewFactory = new RuntimeViewFactory(component, styles, protoViews, changeDetectorFactories, componentViewFactory);
return viewFactory.createViewFactory(template, 0, []);
}
compileComponentCodeGen(component, template, styles, protoViews, changeDetectorFactoryExpressions, componentViewFactory) {
var viewFactory = new CodeGenViewFactory(component, styles, protoViews, changeDetectorFactoryExpressions, componentViewFactory);
var targetStatements = [];
var viewFactoryExpression = viewFactory.createViewFactory(template, 0, targetStatements);
return new SourceExpression(targetStatements.map(stmt => stmt.statement), viewFactoryExpression.expression);
}
};
ViewCompiler = __decorate([
Injectable(),
__metadata('design:paramtypes', [])
], ViewCompiler);
class CodeGenViewFactory {
constructor(component, styles, protoViews, changeDetectorExpressions, componentViewFactory) {
this.component = component;
this.styles = styles;
this.protoViews = protoViews;
this.changeDetectorExpressions = changeDetectorExpressions;
this.componentViewFactory = componentViewFactory;
this._nextVarId = 0;
}
_nextVar(prefix) {
return `${prefix}${this._nextVarId++}_${this.component.type.name}`;
}
_nextRenderVar() { return this._nextVar('render'); }
_nextAppVar() { return this._nextVar('app'); }
_nextDisposableVar() {
return `disposable${this._nextVarId++}_${this.component.type.name}`;
}
createText(renderer, parent, text, targetStatements) {
var varName = this._nextRenderVar();
var statement = `var ${varName} = ${renderer.expression}.createText(${isPresent(parent) ? parent.expression : null}, ${escapeSingleQuoteString(text)});`;
targetStatements.push(new Statement(statement));
return new Expression(varName);
}
createElement(renderer, parentRenderNode, name, rootSelector, targetStatements) {
var varName = this._nextRenderVar();
var valueExpr;
if (isPresent(rootSelector)) {
valueExpr = `${rootSelector.expression} == null ?
${renderer.expression}.createElement(${isPresent(parentRenderNode) ? parentRenderNode.expression : null}, ${escapeSingleQuoteString(name)}) :
${renderer.expression}.selectRootElement(${rootSelector.expression});`;
}
else {
valueExpr =
`${renderer.expression}.createElement(${isPresent(parentRenderNode) ? parentRenderNode.expression : null}, ${escapeSingleQuoteString(name)})`;
}
var statement = `var ${varName} = ${valueExpr};`;
targetStatements.push(new Statement(statement));
return new Expression(varName);
}
createTemplateAnchor(renderer, parentRenderNode, targetStatements) {
var varName = this._nextRenderVar();
var valueExpr = `${renderer.expression}.createTemplateAnchor(${isPresent(parentRenderNode) ? parentRenderNode.expression : null});`;
targetStatements.push(new Statement(`var ${varName} = ${valueExpr}`));
return new Expression(varName);
}
createGlobalEventListener(renderer, appView, boundElementIndex, eventAst, targetStatements) {
var disposableVar = this._nextDisposableVar();
var eventHandlerExpr = codeGenEventHandler(appView, boundElementIndex, eventAst.fullName);
targetStatements.push(new Statement(`var ${disposableVar} = ${renderer.expression}.listenGlobal(${escapeValue(eventAst.target)}, ${escapeValue(eventAst.name)}, ${eventHandlerExpr});`));
return new Expression(disposableVar);
}
createElementEventListener(renderer, appView, boundElementIndex, renderNode, eventAst, targetStatements) {
var disposableVar = this._nextDisposableVar();
var eventHandlerExpr = codeGenEventHandler(appView, boundElementIndex, eventAst.fullName);
targetStatements.push(new Statement(`var ${disposableVar} = ${renderer.expression}.listen(${renderNode.expression}, ${escapeValue(eventAst.name)}, ${eventHandlerExpr});`));
return new Expression(disposableVar);
}
setElementAttribute(renderer, renderNode, attrName, attrValue, targetStatements) {
targetStatements.push(new Statement(`${renderer.expression}.setElementAttribute(${renderNode.expression}, ${escapeSingleQuoteString(attrName)}, ${escapeSingleQuoteString(attrValue)});`));
}
createAppElement(appProtoEl, appView, renderNode, parentAppEl, embeddedViewFactory, targetStatements) {
var appVar = this._nextAppVar();
var varValue = `new ${APP_EL_MODULE_REF}AppElement(${appProtoEl.expression}, ${appView.expression},
${isPresent(parentAppEl) ? parentAppEl.expression : null}, ${renderNode.expression}, ${isPresent(embeddedViewFactory) ? embeddedViewFactory.expression : null})`;
targetStatements.push(new Statement(`var ${appVar} = ${varValue};`));
return new Expression(appVar);
}
createAndSetComponentView(renderer, viewManager, view, appEl, component, contentNodesByNgContentIndex, targetStatements) {
var codeGenContentNodes;
if (this.component.type.isHost) {
codeGenContentNodes = `${view.expression}.projectableNodes`;
}
else {
codeGenContentNodes =
`[${contentNodesByNgContentIndex.map(nodes => codeGenFlatArray(nodes)).join(',')}]`;
}
targetStatements.push(new Statement(`${this.componentViewFactory(component)}(${renderer.expression}, ${viewManager.expression}, ${appEl.expression}, ${codeGenContentNodes}, null, null, null);`));
}
getProjectedNodes(projectableNodes, ngContentIndex) {
return new Expression(`${projectableNodes.expression}[${ngContentIndex}]`, true);
}
appendProjectedNodes(renderer, parent, nodes, targetStatements) {
targetStatements.push(new Statement(`${renderer.expression}.projectNodes(${parent.expression}, ${APP_VIEW_MODULE_REF}flattenNestedViewRenderNodes(${nodes.expression}));`));
}
createViewFactory(asts, embeddedTemplateIndex, targetStatements) {
var compileProtoView = this.protoViews[embeddedTemplateIndex];
var isHostView = this.component.type.isHost;
var isComponentView = embeddedTemplateIndex === 0 && !isHostView;
var visitor = new ViewBuilderVisitor(new Expression('renderer'), new Expression('viewManager'), new Expression('projectableNodes'), isHostView ? new Expression('rootSelector') : null, new Expression('view'), compileProtoView, targetStatements, this);
templateVisitAll(visitor, asts, new ParentElement(isComponentView ? new Expression('parentRenderNode') : null, null, null));
var appProtoView = compileProtoView.protoView.expression;
var viewFactoryName = codeGenViewFactoryName(this.component, embeddedTemplateIndex);
var changeDetectorFactory = this.changeDetectorExpressions.expressions[embeddedTemplateIndex];
var factoryArgs = [
'parentRenderer',
'viewManager',
'containerEl',
'projectableNodes',
'rootSelector',
'dynamicallyCreatedProviders',
'rootInjector'
];
var initRendererStmts = [];
var rendererExpr = `parentRenderer`;
if (embeddedTemplateIndex === 0) {
var renderCompTypeVar = this._nextVar('renderType');
targetStatements.push(new Statement(`var ${renderCompTypeVar} = null;`));
var stylesVar = this._nextVar('styles');
targetStatements.push(new Statement(`${CONST_VAR} ${stylesVar} = ${this.styles.expression};`));
var encapsulation = this.component.template.encapsulation;
initRendererStmts.push(`if (${renderCompTypeVar} == null) {
${renderCompTypeVar} = viewManager.createRenderComponentType(${codeGenViewEncapsulation(encapsulation)}, ${stylesVar});
}`);
rendererExpr = `parentRenderer.renderComponent(${renderCompTypeVar})`;
}
var statement = `
${codeGenFnHeader(factoryArgs, viewFactoryName)}{
${initRendererStmts.join('\n')}
var renderer = ${rendererExpr};
var view = new ${APP_VIEW_MODULE_REF}AppView(
${appProtoView}, renderer, viewManager,
projectableNodes,
containerEl,
dynamicallyCreatedProviders, rootInjector,
${changeDetectorFactory}()
);
${APP_VIEW_MODULE_REF}checkSlotCount(${escapeValue(this.component.type.name)}, ${this.component.template.ngContentSelectors.length}, projectableNodes);
${isComponentView ? 'var parentRenderNode = renderer.createViewRoot(view.containerAppElement.nativeElement);' : ''}
${visitor.renderStmts.map(stmt => stmt.statement).join('\n')}
${visitor.appStmts.map(stmt => stmt.statement).join('\n')}
view.init(${codeGenFlatArray(visitor.rootNodesOrAppElements)}, ${codeGenArray(visitor.renderNodes)}, ${codeGenArray(visitor.appDisposables)},
${codeGenArray(visitor.appElements)});
return view;
}`;
targetStatements.push(new Statement(statement));
return new Expression(viewFactoryName);
}
}
class RuntimeViewFactory {
constructor(component, styles, protoViews, changeDetectorFactories, componentViewFactory) {
this.component = component;
this.styles = styles;
this.protoViews = protoViews;
this.changeDetectorFactories = changeDetectorFactories;
this.componentViewFactory = componentViewFactory;
}
createText(renderer, parent, text, targetStatements) {
return renderer.createText(parent, text);
}
createElement(renderer, parent, name, rootSelector, targetStatements) {
var el;
if (isPresent(rootSelector)) {
el = renderer.selectRootElement(rootSelector);
}
else {
el = renderer.createElement(parent, name);
}
return el;
}
createTemplateAnchor(renderer, parent, targetStatements) {
return renderer.createTemplateAnchor(parent);
}
createGlobalEventListener(renderer, appView, boundElementIndex, eventAst, targetStatements) {
return renderer.listenGlobal(eventAst.target, eventAst.name, (event) => appView.triggerEventHandlers(eventAst.fullName, event, boundElementIndex));
}
createElementEventListener(renderer, appView, boundElementIndex, renderNode, eventAst, targetStatements) {
return renderer.listen(renderNode, eventAst.name, (event) => appView.triggerEventHandlers(eventAst.fullName, event, boundElementIndex));
}
setElementAttribute(renderer, renderNode, attrName, attrValue, targetStatements) {
renderer.setElementAttribute(renderNode, attrName, attrValue);
}
createAppElement(appProtoEl, appView, renderNode, parentAppEl, embeddedViewFactory, targetStatements) {
return new AppElement(appProtoEl, appView, parentAppEl, renderNode, embeddedViewFactory);
}
createAndSetComponentView(renderer, viewManager, appView, appEl, component, contentNodesByNgContentIndex, targetStatements) {
var flattenedContentNodes;
if (this.component.type.isHost) {
flattenedContentNodes = appView.projectableNodes;
}
else {
flattenedContentNodes = ListWrapper.createFixedSize(contentNodesByNgContentIndex.length);
for (var i = 0; i < contentNodesByNgContentIndex.length; i++) {
flattenedContentNodes[i] = flattenArray(contentNodesByNgContentIndex[i], []);
}
}
this.componentViewFactory(component)(renderer, viewManager, appEl, flattenedContentNodes);
}
getProjectedNodes(projectableNodes, ngContentIndex) {
return projectableNodes[ngContentIndex];
}
appendProjectedNodes(renderer, parent, nodes, targetStatements) {
renderer.projectNodes(parent, flattenNestedViewRenderNodes(nodes));
}
createViewFactory(asts, embeddedTemplateIndex, targetStatements) {
var compileProtoView = this.protoViews[embeddedTemplateIndex];
var isComponentView = compileProtoView.protoView.type === ViewType.COMPONENT;
var renderComponentType = null;
return (parentRenderer, viewManager, containerEl, projectableNodes, rootSelector = null, dynamicallyCreatedProviders = null, rootInjector = null) => {
checkSlotCount(this.component.type.name, this.component.template.ngContentSelectors.length, projectableNodes);
var renderer;
if (embeddedTemplateIndex === 0) {
if (isBlank(renderComponentType)) {
renderComponentType = viewManager.createRenderComponentType(this.component.template.encapsulation, this.styles);
}
renderer = parentRenderer.renderComponent(renderComponentType);
}
else {
renderer = parentRenderer;
}
var changeDetector = this.changeDetectorFactories[embeddedTemplateIndex]();
var view = new AppView(compileProtoView.protoView, renderer, viewManager, projectableNodes, containerEl, dynamicallyCreatedProviders, rootInjector, changeDetector);
var visitor = new ViewBuilderVisitor(renderer, viewManager, projectableNodes, rootSelector, view, compileProtoView, [], this);
var parentRenderNode = isComponentView ? renderer.createViewRoot(containerEl.nativeElement) : null;
templateVisitAll(visitor, asts, new ParentElement(parentRenderNode, null, null));
view.init(flattenArray(visitor.rootNodesOrAppElements, []), visitor.renderNodes, visitor.appDisposables, visitor.appElements);
return view;
};
}
}
class ParentElement {
constructor(renderNode, appEl, component) {
this.renderNode = renderNode;
this.appEl = appEl;
this.component = component;
if (isPresent(component)) {
this.contentNodesByNgContentIndex =
ListWrapper.createFixedSize(component.template.ngContentSelectors.length);
for (var i = 0; i < this.contentNodesByNgContentIndex.length; i++) {
this.contentNodesByNgContentIndex[i] = [];
}
}
else {
this.contentNodesByNgContentIndex = null;
}
}
addContentNode(ngContentIndex, nodeExpr) {
this.contentNodesByNgContentIndex[ngContentIndex].push(nodeExpr);
}
}
class ViewBuilderVisitor {
constructor(renderer, viewManager, projectableNodes, rootSelector, view, protoView, targetStatements, factory) {
this.renderer = renderer;
this.viewManager = viewManager;
this.projectableNodes = projectableNodes;
this.rootSelector = rootSelector;
this.view = view;
this.protoView = protoView;
this.targetStatements = targetStatements;
this.factory = factory;
this.renderStmts = [];
this.renderNodes = [];
this.appStmts = [];
this.appElements = [];
this.appDisposables = [];
this.rootNodesOrAppElements = [];
this.elementCount = 0;
}
_addRenderNode(renderNode, appEl, ngContentIndex, parent) {
this.renderNodes.push(renderNode);
if (isPresent(parent.component)) {
if (isPresent(ngContentIndex)) {
parent.addContentNode(ngContentIndex, isPresent(appEl) ? appEl : renderNode);
}
}
else if (isBlank(parent.renderNode)) {
this.rootNodesOrAppElements.push(isPresent(appEl) ? appEl : renderNode);
}
}
_getParentRenderNode(ngContentIndex, parent) {
return isPresent(parent.component) &&
parent.component.template.encapsulation !== ViewEncapsulation.Native ?
null :
parent.renderNode;
}
visitBoundText(ast, parent) {
return this._visitText('', ast.ngContentIndex, parent);
}
visitText(ast, parent) {
return this._visitText(ast.value, ast.ngContentIndex, parent);
}
_visitText(value, ngContentIndex, parent) {
var renderNode = this.factory.createText(this.renderer, this._getParentRenderNode(ngContentIndex, parent), value, this.renderStmts);
this._addRenderNode(renderNode, null, ngContentIndex, parent);
return null;
}
visitNgContent(ast, parent) {
var nodesExpression = this.factory.getProjectedNodes(this.projectableNodes, ast.index);
if (isPresent(parent.component)) {
if (isPresent(ast.ngContentIndex)) {
parent.addContentNode(ast.ngContentIndex, nodesExpression);
}
}
else {
if (isPresent(parent.renderNode)) {
this.factory.appendProjectedNodes(this.renderer, parent.renderNode, nodesExpression, this.renderStmts);
}
else {
this.rootNodesOrAppElements.push(nodesExpression);
}
}
return null;
}
visitElement(ast, parent) {
var renderNode = this.factory.createElement(this.renderer, this._getParentRenderNode(ast.ngContentIndex, parent), ast.name, this.rootSelector, this.renderStmts);
var component = ast.getComponent();
var elementIndex = this.elementCount++;
var protoEl = this.protoView.protoElements[elementIndex];
protoEl.renderEvents.forEach((eventAst) => {
var disposable;
if (isPresent(eventAst.target)) {
disposable = this.factory.createGlobalEventListener(this.renderer, this.view, protoEl.boundElementIndex, eventAst, this.renderStmts);
}
else {
disposable = this.factory.createElementEventListener(this.renderer, this.view, protoEl.boundElementIndex, renderNode, eventAst, this.renderStmts);
}
this.appDisposables.push(disposable);
});
for (var i = 0; i < protoEl.attrNameAndValues.length; i++) {
var attrName = protoEl.attrNameAndValues[i][0];
var attrValue = protoEl.attrNameAndValues[i][1];
this.factory.setElementAttribute(this.renderer, renderNode, attrName, attrValue, this.renderStmts);
}
var appEl = null;
if (isPresent(protoEl.appProtoEl)) {
appEl = this.factory.createAppElement(protoEl.appProtoEl, this.view, renderNode, parent.appEl, null, this.appStmts);
this.appElements.push(appEl);
}
this._addRenderNode(renderNode, appEl, ast.ngContentIndex, parent);
var newParent = new ParentElement(renderNode, isPresent(appEl) ? appEl : parent.appEl, component);
templateVisitAll(this, ast.children, newParent);
if (isPresent(appEl) && isPresent(component)) {
this.factory.createAndSetComponentView(this.renderer, this.viewManager, this.view, appEl, component, newParent.contentNodesByNgContentIndex, this.appStmts);
}
return null;
}
visitEmbeddedTemplate(ast, parent) {
var renderNode = this.factory.createTemplateAnchor(this.renderer, this._getParentRenderNode(ast.ngContentIndex, parent), this.renderStmts);
var elementIndex = this.elementCount++;
var protoEl = this.protoView.protoElements[elementIndex];
var embeddedViewFactory = this.factory.createViewFactory(ast.children, protoEl.embeddedTemplateIndex, this.targetStatements);
var appEl = this.factory.createAppElement(protoEl.appProtoEl, this.view, renderNode, parent.appEl, embeddedViewFactory, this.appStmts);
this._addRenderNode(renderNode, appEl, ast.ngContentIndex, parent);
this.appElements.push(appEl);
return null;
}
visitVariable(ast, ctx) { return null; }
visitAttr(ast, ctx) { return null; }
visitDirective(ast, ctx) { return null; }
visitEvent(ast, ctx) { return null; }
visitDirectiveProperty(ast, context) { return null; }
visitElementProperty(ast, context) { return null; }
}
function codeGenEventHandler(view, boundElementIndex, eventName) {
return codeGenValueFn(['event'], `${view.expression}.triggerEventHandlers(${escapeValue(eventName)}, event, ${boundElementIndex})`);
}
function codeGenViewFactoryName(component, embeddedTemplateIndex) {
return `viewFactory_${component.type.name}${embeddedTemplateIndex}`;
}
function codeGenViewEncapsulation(value) {
if (IS_DART) {
return `${METADATA_MODULE_REF}${value}`;
}
else {
return `${value}`;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFuZ3VsYXIyL3NyYy9jb21waWxlci92aWV3X2NvbXBpbGVyLnRzIl0sIm5hbWVzIjpbIlZpZXdDb21waWxlciIsIlZpZXdDb21waWxlci5jb25zdHJ1Y3RvciIsIlZpZXdDb21waWxlci5jb21waWxlQ29tcG9uZW50UnVudGltZSIsIlZpZXdDb21waWxlci5jb21waWxlQ29tcG9uZW50Q29kZUdlbiIsIkNvZGVHZW5WaWV3RmFjdG9yeSIsIkNvZGVHZW5WaWV3RmFjdG9yeS5jb25zdHJ1Y3RvciIsIkNvZGVHZW5WaWV3RmFjdG9yeS5fbmV4dFZhciIsIkNvZGVHZW5WaWV3RmFjdG9yeS5fbmV4dFJlbmRlclZhciIsIkNvZGVHZW5WaWV3RmFjdG9yeS5fbmV4dEFwcFZhciIsIkNvZGVHZW5WaWV3RmFjdG9yeS5fbmV4dERpc3Bvc2FibGVWYXIiLCJDb2RlR2VuVmlld0ZhY3RvcnkuY3JlYXRlVGV4dCIsIkNvZGVHZW5WaWV3RmFjdG9yeS5jcmVhdGVFbGVtZW50IiwiQ29kZUdlblZpZXdGYWN0b3J5LmNyZWF0ZVRlbXBsYXRlQW5jaG9yIiwiQ29kZUdlblZpZXdGYWN0b3J5LmNyZWF0ZUdsb2JhbEV2ZW50TGlzdGVuZXIiLCJDb2RlR2VuVmlld0ZhY3RvcnkuY3JlYXRlRWxlbWVudEV2ZW50TGlzdGVuZXIiLCJDb2RlR2VuVmlld0ZhY3Rvcnkuc2V0RWxlbWVudEF0dHJpYnV0ZSIsIkNvZGVHZW5WaWV3RmFjdG9yeS5jcmVhdGVBcHBFbGVtZW50IiwiQ29kZUdlblZpZXdGYWN0b3J5LmNyZWF0ZUFuZFNldENvbXBvbmVudFZpZXciLCJDb2RlR2VuVmlld0ZhY3RvcnkuZ2V0UHJvamVjdGVkTm9kZXMiLCJDb2RlR2VuVmlld0ZhY3RvcnkuYXBwZW5kUHJvamVjdGVkTm9kZXMiLCJDb2RlR2VuVmlld0ZhY3RvcnkuY3JlYXRlVmlld0ZhY3RvcnkiLCJSdW50aW1lVmlld0ZhY3RvcnkiLCJSdW50aW1lVmlld0ZhY3RvcnkuY29uc3RydWN0b3IiLCJSdW50aW1lVmlld0ZhY3RvcnkuY3JlYXRlVGV4dCIsIlJ1bnRpbWVWaWV3RmFjdG9yeS5jcmVhdGVFbGVtZW50IiwiUnVudGltZVZpZXdGYWN0b3J5LmNyZWF0ZVRlbXBsYXRlQW5jaG9yIiwiUnVudGltZVZpZXdGYWN0b3J5LmNyZWF0ZUdsb2JhbEV2ZW50TGlzdGVuZXIiLCJSdW50aW1lVmlld0ZhY3RvcnkuY3JlYXRlRWxlbWVudEV2ZW50TGlzdGVuZXIiLCJSdW50aW1lVmlld0ZhY3Rvcnkuc2V0RWxlbWVudEF0dHJpYnV0ZSIsIlJ1bnRpbWVWaWV3RmFjdG9yeS5jcmVhdGVBcHBFbGVtZW50IiwiUnVudGltZVZpZXdGYWN0b3J5LmNyZWF0ZUFuZFNldENvbXBvbmVudFZpZXciLCJSdW50aW1lVmlld0ZhY3RvcnkuZ2V0UHJvamVjdGVkTm9kZXMiLCJSdW50aW1lVmlld0ZhY3RvcnkuYXBwZW5kUHJvamVjdGVkTm9kZXMiLCJSdW50aW1lVmlld0ZhY3RvcnkuY3JlYXRlVmlld0ZhY3RvcnkiLCJQYXJlbnRFbGVtZW50IiwiUGFyZW50RWxlbWVudC5jb25zdHJ1Y3RvciIsIlBhcmVudEVsZW1lbnQuYWRkQ29udGVudE5vZGUiLCJWaWV3QnVpbGRlclZpc2l0b3IiLCJWaWV3QnVpbGRlclZpc2l0b3IuY29uc3RydWN0b3IiLCJWaWV3QnVpbGRlclZpc2l0b3IuX2FkZFJlbmRlck5vZGUiLCJWaWV3QnVpbGRlclZpc2l0b3IuX2dldFBhcmVudFJlbmRlck5vZGUiLCJWaWV3QnVpbGRlclZpc2l0b3IudmlzaXRCb3VuZFRleHQiLCJWaWV3QnVpbGRlclZpc2l0b3IudmlzaXRUZXh0IiwiVmlld0J1aWxkZXJWaXNpdG9yLl92aXNpdFRleHQiLCJWaWV3QnVpbGRlclZpc2l0b3IudmlzaXROZ0NvbnRlbnQiLCJWaWV3QnVpbGRlclZpc2l0b3IudmlzaXRFbGVtZW50IiwiVmlld0J1aWxkZXJWaXNpdG9yLnZpc2l0RW1iZWRkZWRUZW1wbGF0ZSIsIlZpZXdCdWlsZGVyVmlzaXRvci52aXNpdFZhcmlhYmxlIiwiVmlld0J1aWxkZXJWaXNpdG9yLnZpc2l0QXR0ciIsIlZpZXdCdWlsZGVyVmlzaXRvci52aXNpdERpcmVjdGl2ZSIsIlZpZXdCdWlsZGVyVmlzaXRvci52aXNpdEV2ZW50IiwiVmlld0J1aWxkZXJWaXNpdG9yLnZpc2l0RGlyZWN0aXZlUHJvcGVydHkiLCJWaWV3QnVpbGRlclZpc2l0b3IudmlzaXRFbGVtZW50UHJvcGVydHkiLCJjb2RlR2VuRXZlbnRIYW5kbGVyIiwiY29kZUdlblZpZXdGYWN0b3J5TmFtZSIsImNvZGVHZW5WaWV3RW5jYXBzdWxhdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O09BQU8sRUFDTCxTQUFTLEVBQ1QsT0FBTyxFQUlQLE9BQU8sRUFDUCxVQUFVLEVBQ1gsTUFBTSwwQkFBMEI7T0FDMUIsRUFBK0IsV0FBVyxFQUFDLE1BQU0sZ0NBQWdDO09BQ2pGLEVBY0wsZ0JBQWdCLEVBQ2pCLE1BQU0sZ0JBQWdCO09BRWhCLEVBQW9CLGdCQUFnQixFQUFZLE1BQU0saUJBQWlCO09BQ3ZFLEVBRUwsT0FBTyxFQUNQLDRCQUE0QixFQUM1QixjQUFjLEVBQ2YsTUFBTSwrQkFBK0I7T0FDL0IsRUFBQyxRQUFRLEVBQUMsTUFBTSxvQ0FBb0M7T0FFcEQsRUFBa0IsVUFBVSxFQUFDLE1BQU0sa0NBQWtDO09BRXJFLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpQ0FBaUM7T0FDMUQsRUFDTCx1QkFBdUIsRUFFdkIsY0FBYyxFQUNkLGVBQWUsRUFFZixTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1YsTUFBTSxRQUFRO09BQ1IsRUFBbUIsVUFBVSxFQUFXLE1BQU0sc0JBQXNCO09BRXBFLEVBQ0wsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixtQkFBbUIsRUFHcEIsTUFBTSx1QkFBdUI7QUFFOUIsYUFBYSxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7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QSxDQUFDQSxNQUFNQSxDQUFDQSxTQUFTQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNoQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsU0FBU0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsY0FBY0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ2xDQSxNQUFNQSxDQUFDQSxjQUFjQSxDQUFDQSxHQUFHQSxDQUFDQSxjQUFjQSxFQUFFQSxlQUFlQSxDQUFDQSxDQUFDQTtZQUM3REEsQ0FBQ0E7UUFDSEEsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDTkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ2pDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxvQkFBb0JBLENBQUNBLElBQUlBLENBQUNBLFFBQVFBLEVBQUVBLE1BQU1BLENBQUNBLFVBQVVBLEVBQUVBLGVBQWVBLEVBQ2pEQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFDQSxDQUFDQTtZQUN0REEsQ0FBQ0E7WUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7Z0JBQ05BLElBQUlBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsSUFBSUEs