angular2
Version:
Angular 2 - a web framework for modern web apps
399 lines • 97.6 kB
JavaScript
'use strict';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);
};
var lang_1 = require('angular2/src/facade/lang');
var collection_1 = require('angular2/src/facade/collection');
var template_ast_1 = require('./template_ast');
var source_module_1 = require('./source_module');
var view_1 = require('angular2/src/core/linker/view');
var view_type_1 = require('angular2/src/core/linker/view_type');
var element_1 = require('angular2/src/core/linker/element');
var view_2 = require('angular2/src/core/metadata/view');
var util_1 = require('./util');
var di_1 = require('angular2/src/core/di');
var proto_view_compiler_1 = require('./proto_view_compiler');
exports.VIEW_JIT_IMPORTS = lang_1.CONST_EXPR({
'AppView': view_1.AppView,
'AppElement': element_1.AppElement,
'flattenNestedViewRenderNodes': view_1.flattenNestedViewRenderNodes,
'checkSlotCount': view_1.checkSlotCount
});
var ViewCompiler = (function () {
function ViewCompiler() {
}
ViewCompiler.prototype.compileComponentRuntime = function (component, template, styles, protoViews, changeDetectorFactories, componentViewFactory) {
var viewFactory = new RuntimeViewFactory(component, styles, protoViews, changeDetectorFactories, componentViewFactory);
return viewFactory.createViewFactory(template, 0, []);
};
ViewCompiler.prototype.compileComponentCodeGen = function (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 source_module_1.SourceExpression(targetStatements.map(function (stmt) { return stmt.statement; }), viewFactoryExpression.expression);
};
ViewCompiler = __decorate([
di_1.Injectable(),
__metadata('design:paramtypes', [])
], ViewCompiler);
return ViewCompiler;
})();
exports.ViewCompiler = ViewCompiler;
var CodeGenViewFactory = (function () {
function CodeGenViewFactory(component, styles, protoViews, changeDetectorExpressions, componentViewFactory) {
this.component = component;
this.styles = styles;
this.protoViews = protoViews;
this.changeDetectorExpressions = changeDetectorExpressions;
this.componentViewFactory = componentViewFactory;
this._nextVarId = 0;
}
CodeGenViewFactory.prototype._nextVar = function (prefix) {
return "" + prefix + this._nextVarId++ + "_" + this.component.type.name;
};
CodeGenViewFactory.prototype._nextRenderVar = function () { return this._nextVar('render'); };
CodeGenViewFactory.prototype._nextAppVar = function () { return this._nextVar('app'); };
CodeGenViewFactory.prototype._nextDisposableVar = function () {
return "disposable" + this._nextVarId++ + "_" + this.component.type.name;
};
CodeGenViewFactory.prototype.createText = function (renderer, parent, text, targetStatements) {
var varName = this._nextRenderVar();
var statement = "var " + varName + " = " + renderer.expression + ".createText(" + (lang_1.isPresent(parent) ? parent.expression : null) + ", " + util_1.escapeSingleQuoteString(text) + ");";
targetStatements.push(new util_1.Statement(statement));
return new util_1.Expression(varName);
};
CodeGenViewFactory.prototype.createElement = function (renderer, parentRenderNode, name, rootSelector, targetStatements) {
var varName = this._nextRenderVar();
var valueExpr;
if (lang_1.isPresent(rootSelector)) {
valueExpr = rootSelector.expression + " == null ?\n " + renderer.expression + ".createElement(" + (lang_1.isPresent(parentRenderNode) ? parentRenderNode.expression : null) + ", " + util_1.escapeSingleQuoteString(name) + ") :\n " + renderer.expression + ".selectRootElement(" + rootSelector.expression + ");";
}
else {
valueExpr =
renderer.expression + ".createElement(" + (lang_1.isPresent(parentRenderNode) ? parentRenderNode.expression : null) + ", " + util_1.escapeSingleQuoteString(name) + ")";
}
var statement = "var " + varName + " = " + valueExpr + ";";
targetStatements.push(new util_1.Statement(statement));
return new util_1.Expression(varName);
};
CodeGenViewFactory.prototype.createTemplateAnchor = function (renderer, parentRenderNode, targetStatements) {
var varName = this._nextRenderVar();
var valueExpr = renderer.expression + ".createTemplateAnchor(" + (lang_1.isPresent(parentRenderNode) ? parentRenderNode.expression : null) + ");";
targetStatements.push(new util_1.Statement("var " + varName + " = " + valueExpr));
return new util_1.Expression(varName);
};
CodeGenViewFactory.prototype.createGlobalEventListener = function (renderer, appView, boundElementIndex, eventAst, targetStatements) {
var disposableVar = this._nextDisposableVar();
var eventHandlerExpr = codeGenEventHandler(appView, boundElementIndex, eventAst.fullName);
targetStatements.push(new util_1.Statement("var " + disposableVar + " = " + renderer.expression + ".listenGlobal(" + util_1.escapeValue(eventAst.target) + ", " + util_1.escapeValue(eventAst.name) + ", " + eventHandlerExpr + ");"));
return new util_1.Expression(disposableVar);
};
CodeGenViewFactory.prototype.createElementEventListener = function (renderer, appView, boundElementIndex, renderNode, eventAst, targetStatements) {
var disposableVar = this._nextDisposableVar();
var eventHandlerExpr = codeGenEventHandler(appView, boundElementIndex, eventAst.fullName);
targetStatements.push(new util_1.Statement("var " + disposableVar + " = " + renderer.expression + ".listen(" + renderNode.expression + ", " + util_1.escapeValue(eventAst.name) + ", " + eventHandlerExpr + ");"));
return new util_1.Expression(disposableVar);
};
CodeGenViewFactory.prototype.setElementAttribute = function (renderer, renderNode, attrName, attrValue, targetStatements) {
targetStatements.push(new util_1.Statement(renderer.expression + ".setElementAttribute(" + renderNode.expression + ", " + util_1.escapeSingleQuoteString(attrName) + ", " + util_1.escapeSingleQuoteString(attrValue) + ");"));
};
CodeGenViewFactory.prototype.createAppElement = function (appProtoEl, appView, renderNode, parentAppEl, embeddedViewFactory, targetStatements) {
var appVar = this._nextAppVar();
var varValue = "new " + proto_view_compiler_1.APP_EL_MODULE_REF + "AppElement(" + appProtoEl.expression + ", " + appView.expression + ",\n " + (lang_1.isPresent(parentAppEl) ? parentAppEl.expression : null) + ", " + renderNode.expression + ", " + (lang_1.isPresent(embeddedViewFactory) ? embeddedViewFactory.expression : null) + ")";
targetStatements.push(new util_1.Statement("var " + appVar + " = " + varValue + ";"));
return new util_1.Expression(appVar);
};
CodeGenViewFactory.prototype.createAndSetComponentView = function (renderer, viewManager, view, appEl, component, contentNodesByNgContentIndex, targetStatements) {
var codeGenContentNodes;
if (this.component.type.isHost) {
codeGenContentNodes = view.expression + ".projectableNodes";
}
else {
codeGenContentNodes =
"[" + contentNodesByNgContentIndex.map(function (nodes) { return util_1.codeGenFlatArray(nodes); }).join(',') + "]";
}
targetStatements.push(new util_1.Statement(this.componentViewFactory(component) + "(" + renderer.expression + ", " + viewManager.expression + ", " + appEl.expression + ", " + codeGenContentNodes + ", null, null, null);"));
};
CodeGenViewFactory.prototype.getProjectedNodes = function (projectableNodes, ngContentIndex) {
return new util_1.Expression(projectableNodes.expression + "[" + ngContentIndex + "]", true);
};
CodeGenViewFactory.prototype.appendProjectedNodes = function (renderer, parent, nodes, targetStatements) {
targetStatements.push(new util_1.Statement(renderer.expression + ".projectNodes(" + parent.expression + ", " + proto_view_compiler_1.APP_VIEW_MODULE_REF + "flattenNestedViewRenderNodes(" + nodes.expression + "));"));
};
CodeGenViewFactory.prototype.createViewFactory = function (asts, embeddedTemplateIndex, targetStatements) {
var compileProtoView = this.protoViews[embeddedTemplateIndex];
var isHostView = this.component.type.isHost;
var isComponentView = embeddedTemplateIndex === 0 && !isHostView;
var visitor = new ViewBuilderVisitor(new util_1.Expression('renderer'), new util_1.Expression('viewManager'), new util_1.Expression('projectableNodes'), isHostView ? new util_1.Expression('rootSelector') : null, new util_1.Expression('view'), compileProtoView, targetStatements, this);
template_ast_1.templateVisitAll(visitor, asts, new ParentElement(isComponentView ? new util_1.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 util_1.Statement("var " + renderCompTypeVar + " = null;"));
var stylesVar = this._nextVar('styles');
targetStatements.push(new util_1.Statement(util_1.CONST_VAR + " " + stylesVar + " = " + this.styles.expression + ";"));
var encapsulation = this.component.template.encapsulation;
initRendererStmts.push("if (" + renderCompTypeVar + " == null) {\n " + renderCompTypeVar + " = viewManager.createRenderComponentType(" + codeGenViewEncapsulation(encapsulation) + ", " + stylesVar + ");\n }");
rendererExpr = "parentRenderer.renderComponent(" + renderCompTypeVar + ")";
}
var statement = "\n" + util_1.codeGenFnHeader(factoryArgs, viewFactoryName) + "{\n " + initRendererStmts.join('\n') + "\n var renderer = " + rendererExpr + ";\n var view = new " + proto_view_compiler_1.APP_VIEW_MODULE_REF + "AppView(\n " + appProtoView + ", renderer, viewManager,\n projectableNodes,\n containerEl,\n dynamicallyCreatedProviders, rootInjector,\n " + changeDetectorFactory + "()\n );\n " + proto_view_compiler_1.APP_VIEW_MODULE_REF + "checkSlotCount(" + util_1.escapeValue(this.component.type.name) + ", " + this.component.template.ngContentSelectors.length + ", projectableNodes);\n " + (isComponentView ? 'var parentRenderNode = renderer.createViewRoot(view.containerAppElement.nativeElement);' : '') + "\n " + visitor.renderStmts.map(function (stmt) { return stmt.statement; }).join('\n') + "\n " + visitor.appStmts.map(function (stmt) { return stmt.statement; }).join('\n') + "\n\n view.init(" + util_1.codeGenFlatArray(visitor.rootNodesOrAppElements) + ", " + util_1.codeGenArray(visitor.renderNodes) + ", " + util_1.codeGenArray(visitor.appDisposables) + ",\n " + util_1.codeGenArray(visitor.appElements) + ");\n return view;\n}";
targetStatements.push(new util_1.Statement(statement));
return new util_1.Expression(viewFactoryName);
};
return CodeGenViewFactory;
})();
var RuntimeViewFactory = (function () {
function RuntimeViewFactory(component, styles, protoViews, changeDetectorFactories, componentViewFactory) {
this.component = component;
this.styles = styles;
this.protoViews = protoViews;
this.changeDetectorFactories = changeDetectorFactories;
this.componentViewFactory = componentViewFactory;
}
RuntimeViewFactory.prototype.createText = function (renderer, parent, text, targetStatements) {
return renderer.createText(parent, text);
};
RuntimeViewFactory.prototype.createElement = function (renderer, parent, name, rootSelector, targetStatements) {
var el;
if (lang_1.isPresent(rootSelector)) {
el = renderer.selectRootElement(rootSelector);
}
else {
el = renderer.createElement(parent, name);
}
return el;
};
RuntimeViewFactory.prototype.createTemplateAnchor = function (renderer, parent, targetStatements) {
return renderer.createTemplateAnchor(parent);
};
RuntimeViewFactory.prototype.createGlobalEventListener = function (renderer, appView, boundElementIndex, eventAst, targetStatements) {
return renderer.listenGlobal(eventAst.target, eventAst.name, function (event) { return appView.triggerEventHandlers(eventAst.fullName, event, boundElementIndex); });
};
RuntimeViewFactory.prototype.createElementEventListener = function (renderer, appView, boundElementIndex, renderNode, eventAst, targetStatements) {
return renderer.listen(renderNode, eventAst.name, function (event) { return appView.triggerEventHandlers(eventAst.fullName, event, boundElementIndex); });
};
RuntimeViewFactory.prototype.setElementAttribute = function (renderer, renderNode, attrName, attrValue, targetStatements) {
renderer.setElementAttribute(renderNode, attrName, attrValue);
};
RuntimeViewFactory.prototype.createAppElement = function (appProtoEl, appView, renderNode, parentAppEl, embeddedViewFactory, targetStatements) {
return new element_1.AppElement(appProtoEl, appView, parentAppEl, renderNode, embeddedViewFactory);
};
RuntimeViewFactory.prototype.createAndSetComponentView = function (renderer, viewManager, appView, appEl, component, contentNodesByNgContentIndex, targetStatements) {
var flattenedContentNodes;
if (this.component.type.isHost) {
flattenedContentNodes = appView.projectableNodes;
}
else {
flattenedContentNodes = collection_1.ListWrapper.createFixedSize(contentNodesByNgContentIndex.length);
for (var i = 0; i < contentNodesByNgContentIndex.length; i++) {
flattenedContentNodes[i] = util_1.flattenArray(contentNodesByNgContentIndex[i], []);
}
}
this.componentViewFactory(component)(renderer, viewManager, appEl, flattenedContentNodes);
};
RuntimeViewFactory.prototype.getProjectedNodes = function (projectableNodes, ngContentIndex) {
return projectableNodes[ngContentIndex];
};
RuntimeViewFactory.prototype.appendProjectedNodes = function (renderer, parent, nodes, targetStatements) {
renderer.projectNodes(parent, view_1.flattenNestedViewRenderNodes(nodes));
};
RuntimeViewFactory.prototype.createViewFactory = function (asts, embeddedTemplateIndex, targetStatements) {
var _this = this;
var compileProtoView = this.protoViews[embeddedTemplateIndex];
var isComponentView = compileProtoView.protoView.type === view_type_1.ViewType.COMPONENT;
var renderComponentType = null;
return function (parentRenderer, viewManager, containerEl, projectableNodes, rootSelector, dynamicallyCreatedProviders, rootInjector) {
if (rootSelector === void 0) { rootSelector = null; }
if (dynamicallyCreatedProviders === void 0) { dynamicallyCreatedProviders = null; }
if (rootInjector === void 0) { rootInjector = null; }
view_1.checkSlotCount(_this.component.type.name, _this.component.template.ngContentSelectors.length, projectableNodes);
var renderer;
if (embeddedTemplateIndex === 0) {
if (lang_1.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 view_1.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;
template_ast_1.templateVisitAll(visitor, asts, new ParentElement(parentRenderNode, null, null));
view.init(util_1.flattenArray(visitor.rootNodesOrAppElements, []), visitor.renderNodes, visitor.appDisposables, visitor.appElements);
return view;
};
};
return RuntimeViewFactory;
})();
var ParentElement = (function () {
function ParentElement(renderNode, appEl, component) {
this.renderNode = renderNode;
this.appEl = appEl;
this.component = component;
if (lang_1.isPresent(component)) {
this.contentNodesByNgContentIndex =
collection_1.ListWrapper.createFixedSize(component.template.ngContentSelectors.length);
for (var i = 0; i < this.contentNodesByNgContentIndex.length; i++) {
this.contentNodesByNgContentIndex[i] = [];
}
}
else {
this.contentNodesByNgContentIndex = null;
}
}
ParentElement.prototype.addContentNode = function (ngContentIndex, nodeExpr) {
this.contentNodesByNgContentIndex[ngContentIndex].push(nodeExpr);
};
return ParentElement;
})();
var ViewBuilderVisitor = (function () {
function ViewBuilderVisitor(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;
}
ViewBuilderVisitor.prototype._addRenderNode = function (renderNode, appEl, ngContentIndex, parent) {
this.renderNodes.push(renderNode);
if (lang_1.isPresent(parent.component)) {
if (lang_1.isPresent(ngContentIndex)) {
parent.addContentNode(ngContentIndex, lang_1.isPresent(appEl) ? appEl : renderNode);
}
}
else if (lang_1.isBlank(parent.renderNode)) {
this.rootNodesOrAppElements.push(lang_1.isPresent(appEl) ? appEl : renderNode);
}
};
ViewBuilderVisitor.prototype._getParentRenderNode = function (ngContentIndex, parent) {
return lang_1.isPresent(parent.component) &&
parent.component.template.encapsulation !== view_2.ViewEncapsulation.Native ?
null :
parent.renderNode;
};
ViewBuilderVisitor.prototype.visitBoundText = function (ast, parent) {
return this._visitText('', ast.ngContentIndex, parent);
};
ViewBuilderVisitor.prototype.visitText = function (ast, parent) {
return this._visitText(ast.value, ast.ngContentIndex, parent);
};
ViewBuilderVisitor.prototype._visitText = function (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;
};
ViewBuilderVisitor.prototype.visitNgContent = function (ast, parent) {
var nodesExpression = this.factory.getProjectedNodes(this.projectableNodes, ast.index);
if (lang_1.isPresent(parent.component)) {
if (lang_1.isPresent(ast.ngContentIndex)) {
parent.addContentNode(ast.ngContentIndex, nodesExpression);
}
}
else {
if (lang_1.isPresent(parent.renderNode)) {
this.factory.appendProjectedNodes(this.renderer, parent.renderNode, nodesExpression, this.renderStmts);
}
else {
this.rootNodesOrAppElements.push(nodesExpression);
}
}
return null;
};
ViewBuilderVisitor.prototype.visitElement = function (ast, parent) {
var _this = this;
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(function (eventAst) {
var disposable;
if (lang_1.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 (lang_1.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, lang_1.isPresent(appEl) ? appEl : parent.appEl, component);
template_ast_1.templateVisitAll(this, ast.children, newParent);
if (lang_1.isPresent(appEl) && lang_1.isPresent(component)) {
this.factory.createAndSetComponentView(this.renderer, this.viewManager, this.view, appEl, component, newParent.contentNodesByNgContentIndex, this.appStmts);
}
return null;
};
ViewBuilderVisitor.prototype.visitEmbeddedTemplate = function (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;
};
ViewBuilderVisitor.prototype.visitVariable = function (ast, ctx) { return null; };
ViewBuilderVisitor.prototype.visitAttr = function (ast, ctx) { return null; };
ViewBuilderVisitor.prototype.visitDirective = function (ast, ctx) { return null; };
ViewBuilderVisitor.prototype.visitEvent = function (ast, ctx) { return null; };
ViewBuilderVisitor.prototype.visitDirectiveProperty = function (ast, context) { return null; };
ViewBuilderVisitor.prototype.visitElementProperty = function (ast, context) { return null; };
return ViewBuilderVisitor;
})();
function codeGenEventHandler(view, boundElementIndex, eventName) {
return util_1.codeGenValueFn(['event'], view.expression + ".triggerEventHandlers(" + util_1.escapeValue(eventName) + ", event, " + boundElementIndex + ")");
}
function codeGenViewFactoryName(component, embeddedTemplateIndex) {
return "viewFactory_" + component.type.name + embeddedTemplateIndex;
}
function codeGenViewEncapsulation(value) {
if (lang_1.IS_DART) {
return "" + proto_view_compiler_1.METADATA_MODULE_REF + value;
}
else {
return "" + value;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFuZ3VsYXIyL3NyYy9jb21waWxlci92aWV3X2NvbXBpbGVyLnRzIl0sIm5hbWVzIjpbIlZpZXdDb21waWxlciIsIlZpZXdDb21waWxlci5jb25zdHJ1Y3RvciIsIlZpZXdDb21waWxlci5jb21waWxlQ29tcG9uZW50UnVudGltZSIsIlZpZXdDb21waWxlci5jb21waWxlQ29tcG9uZW50Q29kZUdlbiIsIkNvZGVHZW5WaWV3RmFjdG9yeSIsIkNvZGVHZW5WaWV3RmFjdG9yeS5jb25zdHJ1Y3RvciIsIkNvZGVHZW5WaWV3RmFjdG9yeS5fbmV4dFZhciIsIkNvZGVHZW5WaWV3RmFjdG9yeS5fbmV4dFJlbmRlclZhciIsIkNvZGVHZW5WaWV3RmFjdG9yeS5fbmV4dEFwcFZhciIsIkNvZGVHZW5WaWV3RmFjdG9yeS5fbmV4dERpc3Bvc2FibGVWYXIiLCJDb2RlR2VuVmlld0ZhY3RvcnkuY3JlYXRlVGV4dCIsIkNvZGVHZW5WaWV3RmFjdG9yeS5jcmVhdGVFbGVtZW50IiwiQ29kZUdlblZpZXdGYWN0b3J5LmNyZWF0ZVRlbXBsYXRlQW5jaG9yIiwiQ29kZUdlblZpZXdGYWN0b3J5LmNyZWF0ZUdsb2JhbEV2ZW50TGlzdGVuZXIiLCJDb2RlR2VuVmlld0ZhY3RvcnkuY3JlYXRlRWxlbWVudEV2ZW50TGlzdGVuZXIiLCJDb2RlR2VuVmlld0ZhY3Rvcnkuc2V0RWxlbWVudEF0dHJpYnV0ZSIsIkNvZGVHZW5WaWV3RmFjdG9yeS5jcmVhdGVBcHBFbGVtZW50IiwiQ29kZUdlblZpZXdGYWN0b3J5LmNyZWF0ZUFuZFNldENvbXBvbmVudFZpZXciLCJDb2RlR2VuVmlld0ZhY3RvcnkuZ2V0UHJvamVjdGVkTm9kZXMiLCJDb2RlR2VuVmlld0ZhY3RvcnkuYXBwZW5kUHJvamVjdGVkTm9kZXMiLCJDb2RlR2VuVmlld0ZhY3RvcnkuY3JlYXRlVmlld0ZhY3RvcnkiLCJSdW50aW1lVmlld0ZhY3RvcnkiLCJSdW50aW1lVmlld0ZhY3RvcnkuY29uc3RydWN0b3IiLCJSdW50aW1lVmlld0ZhY3RvcnkuY3JlYXRlVGV4dCIsIlJ1bnRpbWVWaWV3RmFjdG9yeS5jcmVhdGVFbGVtZW50IiwiUnVudGltZVZpZXdGYWN0b3J5LmNyZWF0ZVRlbXBsYXRlQW5jaG9yIiwiUnVudGltZVZpZXdGYWN0b3J5LmNyZWF0ZUdsb2JhbEV2ZW50TGlzdGVuZXIiLCJSdW50aW1lVmlld0ZhY3RvcnkuY3JlYXRlRWxlbWVudEV2ZW50TGlzdGVuZXIiLCJSdW50aW1lVmlld0ZhY3Rvcnkuc2V0RWxlbWVudEF0dHJpYnV0ZSIsIlJ1bnRpbWVWaWV3RmFjdG9yeS5jcmVhdGVBcHBFbGVtZW50IiwiUnVudGltZVZpZXdGYWN0b3J5LmNyZWF0ZUFuZFNldENvbXBvbmVudFZpZXciLCJSdW50aW1lVmlld0ZhY3RvcnkuZ2V0UHJvamVjdGVkTm9kZXMiLCJSdW50aW1lVmlld0ZhY3RvcnkuYXBwZW5kUHJvamVjdGVkTm9kZXMiLCJSdW50aW1lVmlld0ZhY3RvcnkuY3JlYXRlVmlld0ZhY3RvcnkiLCJQYXJlbnRFbGVtZW50IiwiUGFyZW50RWxlbWVudC5jb25zdHJ1Y3RvciIsIlBhcmVudEVsZW1lbnQuYWRkQ29udGVudE5vZGUiLCJWaWV3QnVpbGRlclZpc2l0b3IiLCJWaWV3QnVpbGRlclZpc2l0b3IuY29uc3RydWN0b3IiLCJWaWV3QnVpbGRlclZpc2l0b3IuX2FkZFJlbmRlck5vZGUiLCJWaWV3QnVpbGRlclZpc2l0b3IuX2dldFBhcmVudFJlbmRlck5vZGUiLCJWaWV3QnVpbGRlclZpc2l0b3IudmlzaXRCb3VuZFRleHQiLCJWaWV3QnVpbGRlclZpc2l0b3IudmlzaXRUZXh0IiwiVmlld0J1aWxkZXJWaXNpdG9yLl92aXNpdFRleHQiLCJWaWV3QnVpbGRlclZpc2l0b3IudmlzaXROZ0NvbnRlbnQiLCJWaWV3QnVpbGRlclZpc2l0b3IudmlzaXRFbGVtZW50IiwiVmlld0J1aWxkZXJWaXNpdG9yLnZpc2l0RW1iZWRkZWRUZW1wbGF0ZSIsIlZpZXdCdWlsZGVyVmlzaXRvci52aXNpdFZhcmlhYmxlIiwiVmlld0J1aWxkZXJWaXNpdG9yLnZpc2l0QXR0ciIsIlZpZXdCdWlsZGVyVmlzaXRvci52aXNpdERpcmVjdGl2ZSIsIlZpZXdCdWlsZGVyVmlzaXRvci52aXNpdEV2ZW50IiwiVmlld0J1aWxkZXJWaXNpdG9yLnZpc2l0RGlyZWN0aXZlUHJvcGVydHkiLCJWaWV3QnVpbGRlclZpc2l0b3IudmlzaXRFbGVtZW50UHJvcGVydHkiLCJjb2RlR2VuRXZlbnRIYW5kbGVyIiwiY29kZUdlblZpZXdGYWN0b3J5TmFtZSIsImNvZGVHZW5WaWV3RW5jYXBzdWxhdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEscUJBUU8sMEJBQTBCLENBQUMsQ0FBQTtBQUNsQywyQkFBd0QsZ0NBQWdDLENBQUMsQ0FBQTtBQUN6Riw2QkFlTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBRXhCLDhCQUE2RCxpQkFBaUIsQ0FBQyxDQUFBO0FBQy9FLHFCQUtPLCtCQUErQixDQUFDLENBQUE7QUFDdkMsMEJBQXVCLG9DQUFvQyxDQUFDLENBQUE7QUFFNUQsd0JBQTBDLGtDQUFrQyxDQUFDLENBQUE7QUFFN0UscUJBQWdDLGlDQUFpQyxDQUFDLENBQUE7QUFDbEUscUJBYU8sUUFBUSxDQUFDLENBQUE7QUFDaEIsbUJBQXFELHNCQUFzQixDQUFDLENBQUE7QUFFNUUsb0NBTU8sdUJBQXVCLENBQUMsQ0FBQTtBQUVsQix3QkFBZ0IsR0FBRyxpQkFBVSxDQUFDO0lBQ3pDLFNBQVMsRUFBRSxjQUFPO0lBQ2xCLFlBQVksRUFBRSxvQkFBVTtJQUN4Qiw4QkFBOEIsRUFBRSxtQ0FBNEI7SUFDNUQsZ0JBQWdCLEVBQUUscUJBQWM7Q0FDakMsQ0FBQyxDQUFDO0FBR0g7SUFFRUE7SUFBZUMsQ0FBQ0E7SUFFaEJELDhDQUF1QkEsR0FBdkJBLFVBQXdCQSxTQUFtQ0EsRUFBRUEsUUFBdUJBLEVBQzVEQSxNQUE2QkEsRUFDN0JBLFVBQTZEQSxFQUM3REEsdUJBQW1DQSxFQUNuQ0Es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